セッション変数はデフォルトの場合、サーバサイドではなくクライアントサイドのクッキーに保持される。(クッキーストア)
クッキー名は、デフォルトの場合、_アプリケーション名_sessionとなる。
値の形式は、[data]–[digest]となっており、dataの文字列に対してdigestを取ったもので、クライアントサイドからの改竄チェックに使われる。
dataは単にBase64でのエンコードで簡単に復号できるのでクライアントに公開すべきでないデータは扱わない。
data, digest = CGI.unescape([クッキーストアの値]).split('--') dec_data = Marshal.load(Base64.decode64(data)) key = [アプリ名]::Application.config.secret_token digest2 = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new("sha1"), key, data) #digestとdigest2が一致 |
こんな感じのソースでフレームワーク内でのdataのデコード処理と、digestのチェックを再現できる。
(ダイジェストのタイプはsha1以外にconfig.action_controller.sessionで変更できる)
参考
Rails 2.0の新しいセッション管理-CookieStore – iビジネス&テクノロジー http://d.hatena.ne.jp/bottleneck/20071123/1195813828
Railsノート – セッションまわりを読む (1) – セッションの保存/復元のタイミング – Alone Like a Rhinoceros Horn
http://d.hatena.ne.jp/h1mesuke/20100206/p1
2.0のcookie session storeを体感する – ザリガニが見ていた…。 http://d.hatena.ne.jp/zariganitosh/20080207/1202373997
railsのクッキーとセッションについてまとめ – おもしろWEBサービス開発日記 http://d.hatena.ne.jp/willnet/20080531/1212239850
コメントを残す