�Ƕ�API�Υޥ˥奢����ɤ�Ǥ��ɤ��狼��ʤ����Ȥ�¿���ʤäƤ�����

�ʤΤǡ��ܤ��ܤ�Rails�Υ��������ɤൡ����������ޤ�����
��äѤꥪ���ץ󥽡����äƤ������Ǥ��衣
������Ʃ���ʥץ������ȤäƺǸ����򸫤Ƥ��ޤ���Ȥ����¿���������ޤ���
���ΰ¿����äƽ��פǡ�����㡼�ɥ��ȡ���ޥ�᤬�����Υץ��ץ饤������ʥץ�󥿥ɥ饤�ФΥХ���ľ���ʤ��ƥ��饤�餷���äƸ��äƤ�����ͳ���褯�狼��ޤ���

�����Rails�Υ��å����ˤĤ���Ĵ�٤ޤ�����

�ɤ������Ƥ�����ʬ����ΤǤ��������å�����Ϣ�ν�����������ݤ���Ǥ���
��Ӥޤˤ�񤫤�Ƥ����̤���塼�˥󥰤Υݥ���Ȥˤ�ʤꤽ���Ǥ���
�ޤ��ϰʲ��Σ��Ԥǽ����γ��פȤ��Ƥɤ�����ˤʤäƤ���Τ��򸫤Ƥߤޤ�����
request.session['my_key'] = new_value

�ʲ��ְ㤨�Ƥ���Ȥ��������ä��餴��Ŧ����������ȹ����Ǥ���

�ޤ��ϼºݥ����������ɤ�egrep�򤫤��ޤ��ä�Ĵ����

Ruby�Υǥ��ե���ȥ饤�֥��Ȥ����Ȥ߹��ޤ�Ƥ���CGI�äơ�JavaǾ���ͤˤ�̾�������ޥ���ʴ��������Ƥ����ΤǤ褯���Ƥ��ʤ��ä��ΤǤ������ºݤΤȤ���Rails��CGI�ѤˤĤ���줿�饤�֥���١����Ȥ�����Ǥ��͡�

CGI���饹�ϡ�Web�����Ф������ץ�������ƤӽФ��ݤ˴Ķ��ѿ��˥᥿�ʾ����Ϳ�����ꡢ�����ץ�����बɸ�����ϤȤ���HTTP���̿��ǡ���������Ϥ����ꤹ�뵬������򤷤Ƥ��ޤ���
�ʤΤǡ����Υ��饹�򥤥󥹥��󥹤���ȡ��Ķ��ѿ���ɸ�����Ϥ���HTTP�ꥯ�����Ȥ�ʬ�Ϥ��Ƥ���ޤ���
Rails�⡢�ǥ��ե���Ȥǥ��ץꥱ�������θƤӽФ��ˤ���CGI�����Ѥ��ޤ���

����ϰʲ��Dz��Ȥʤ���ǧ�Ǥ��ޤ���(kitaj����˶����Ƥ��ä�ancestors�����Ǥ���)
logger.debug( request.class.ancestors.inspect ) # => [ActionController::CgiRequest, ActionController::AbstractRequest, Object, Base64::Deprecated, Base64, Kernel]

����CgiRequest�������Τϰʲ��˥����ɤȤ��ƽ񤫤�Ƥ��ޤ���
rails-1.2.3/lib/displatcher.rb:
request, response = ActionController::CgiRequest.new(cgi, session_options), ActionController::CgiResponse.new(cgi)

������controller����Dz����ʤ��ȤäƤ���request�μ��֤Ϥ�������������Ƥ���CgiRequest�Ǥ���褦�Ǥ���

request.session������������������

����CgiRequest���Ф��ơ�session��������뤿��Υ᥽�åɤ˥�����������ȡ����Ƥξ��CGI::Session.new���¹Ԥ���ޤ���
CGI::Session��initialize�Ǥϡ��ʲ��ν�˥��å����ID�򸫤Ƥ����ޤ���
  1. �ץ�����ब���ꤷ�����å����ID��
  2. QUERY_STRING�Ȥ����ϤäƤ����ѥ�᡼���˥��å����ID�����ꤵ��Ƥ��ʤ���
  3. Cookie�˥��å����ID�����ꤵ��Ƥ��ʤ���
  4. �ɤ�ˤ����ƤϤޤ�ʤ���п����˥��å����ID����������
�������ƺǽ�Ū������줿���å����ID������ˡ����å����Υ��ȥ��Ȥʤ�database_manager�򥤥󥹥��󥹤�������¾Cookie�˽��Ϥ���ʤɤν�����ԤäƤ���CGI::Session��initialize�򽪤��ޤ���

��������session�������ޤ���

�Ǥ�session['my_key']�Ϥɤ���ǽ���Ƥ���Τ���

session���֥������Ȥ������Ǥ�database_manager�Υ��󥹥��󥹤���äƤ��ޤ���
session['my_key']�Τ褦�ˡ����å����ؤΥ���������ȯ������ȡ�����database_manager�إ��٥�Ȥ�ȯ������褦�ˤʤäƤ��ޤ���

  • getter: session['my_key']
    • ���Ƥξ���database_manager��restore���ƤӽФ��졢�ޤ��ǡ����ò¥¹¥È¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É¤ß¹ï¿½ï¿½ï¿½è¤¦ï¿½Ø¼ï¿½ï¿½ï¿½ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
    • �ǡ�����Hash�Ǥ��ꡢ�ǡ������ɤ߹��ޤ줿�餽�Υǡ�������'my_key'�ò»²¾È¤ï¿½ï¿½ï¿½ï¿½Ö¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
  • setter: session['my_key'] = new_value
    • ���������Ƥξ���database_manager��restore���ƤӽФ��졢�ޤ��ǡ����ò¥¹¥È¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É¤ß¹ï¿½ï¿½ï¿½è¤¦ï¿½Ø¼ï¿½ï¿½ï¿½ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
    • ñ��˥ǡ���'my_key'���ͤ�new_value�Ǿ�ñ¤­¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
    • ��������Ǥ��ȡ�database_manager�ˤ���¸�ʤɤΥ��٥�Ȥ�ȯ�������ޤ���
  • update: session.update
    • ���Υ᥽�åɤ��ƤФ��ȥ��ȥ�����¸����ޤ���
  • close: session.close
    • ���Υ᥽�åɤ��ƤФ��ȥ��ȥ����Ĥ��ޤ�������¸���Ƥ����Ĥ���Τ�����Ū�Ǥ���褦�Ǥ���
  • delete: session.delete
    • ʸ���̤ꥻ�å����Υǡ����ò¥¹¥È¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½

�����ޤǤΤޤȤ�

���ʲ����ʤ��ȤäƤ���ʲ��Σ��ԤϿ����ͤ���ޤ줿��Τ��Ȥ������Ȥ����Ȥʤ�ʬ���äƤ��ޤ�����
request.session['my_key'] = new_value

�褯ʬ����ʤ����ȡġ֤���update/close�����Ρ���

actionpack-1.13.3/lib/action_controller/base.rb��process_cleanup�ǥ��å�����close�����褦�ʤΤǤ�����update�Υ����ߥ󥰤�ޤ�ơ�̤���ˤ����Ƥ�Ǥ��륳���ɤ򸫤Ĥ����Ƥ��ޤ���
���äȤɤ����ˤ����������ʤ����ȿ����Ƥ����α�ޤäƤ��ޤ���