«

»

7月
12

Rails3のクッキーストアによるセッション管理について

セッション変数はデフォルトの場合、サーバサイドではなくクライアントサイドのクッキーに保持される。(クッキーストア)

クッキー名は、デフォルトの場合、_アプリケーション名_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

コメントを残す

メールアドレスは公開されません

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>