RailsのセッションはCookie保存

Sessionと聞いて安全・安心と思っていた私にとっては軽く驚愕の事実です。RailsのセッションはデフォルトでCookieに情報を保存するそうです。つまり、ユーザーが閲覧することが可能な状態と言うことになります…。ASP.NETでいうと(意味合いは異なりますが)ViewState程度には安全だと言うことでしょうか。

とはいうものの、Cookieに情報を保存することがデフォルトではありますが設定変更によりDBなど外部ストレージに保存することも可能です。ということで、早速設定を変更してみました。(todo:詳細についてはもう少し調査が必要)

1.config/session_store.rb に設定を記述する

セッションの設定はこちらのファイルに記載します。

[sourcecode language="ruby"]

コメントアウト

Railbook::Application.config.session_store :cookie_store, :key => '_Railbook_session'

sessionをActiveRecordを使用してDBから取得する

Railbook::Application.config.session_store :active_record_store

sessionの各種設定

Railbook::Application.config.session = {

セッション情報を格納する際に使用するクッキー名

:key => '_railbook_session',

HTTPクッキーを有効にするか

:httponly => true } [/sourcecode]

2.DBに保存先のテーブルを作成する

session情報を保存するテーブルを作成します。

[sourcecode language="bash"] rake db:sessions:create invoke active_record create db/migrate/20111020131717_add_sessions_table.rb

rake db:migrate == AddSessionsTable: migrating =============================================== -- create_table(:sessions) -> 0.0027s -- add_index(:sessions, :session_id) -> 0.0012s -- add_index(:sessions, :updated_at) -> 0.0006s == AddSessionsTable: migrated (0.0048s) ====================================== [/sourcecode]

あとはWebRicを再起動することで情報が設定が反映されます。これで大丈夫なのかどうかはもう少し検討が必要そうですが…。

ところで、私はASP.NETの開発全般についてのこの辺の知識については、.NETエンタープライズWebアプリケーション開発技術大全〈Vol.3〉ASP.NET応用編 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)をバイブルとしています。この書籍は、マイクロソフト製品全般を中心に説明されていますが、固有の技術以外の基本的な概念が丁寧に説明されていて、とても理解しやすいと思います。特にトランザクションについては目から鱗です。