RubyをCGIとして使った時にセッション情報をどのように管理しているか知りたかったのでソースを見てみた:
CGI/Session
CGI/Sessionはセッションで保存する内容を(デフォルトだと)ファイルに保存していて、クライアントとはセッションIDをやりとりしている
- デフォルトでCGI::Session::FileStoreが使われる
CGI::Session.new
()に渡すハッシュのdatabase_manager
にクラスを指定することで任意の方法に切り替えられる
FileStore
では- Dir::tmpdir以下にセッションIDのMD5を取ったファイル名のファイルを作る
- クライアントとやりとりするクッキー:セッションID
- キー:デフォルトだと_session_id(参考)という名前
- セッションID: SecureRandom.hex(16)で作られる(32桁の16進数文字列)
備考
- この場合、セッションデータはあるサーバのファイルとして保存されるので、サーバが複数立ち上がる場合に異なるサーバにルーティングされると、セッション情報が正しく処理できない