Railsのsessionの expires

Railsではアクセス毎にsessionの expiresを指定できないっぽいですねぇ。

rails + mongrelで使用しているのですが、そもそも

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/rails.rb



Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body)

なんて記述があるわけで、どうやってもDEFAULT_SESSION_OPTIONSから 逃げることができないと。

sessionの期間を延長するだけなら、このDEFAULT_SESSION_OPTIONSを 書き換えてやればいいんですが(美しくないけど、他にやりようが無い)、 サイトでよくみかける、ユーザによってログイン状態を維持するか否かを選択できる機能を実装するとなるとちょっと工夫がいります。

というのは、この変数はクラス変数なので、一度書き換えると、全体に 波及してしまうのです。

で、解決方法ですが、てっとりばやいのは別のcookieを利用する方法。 これならexpiresを制御できます。

cookieにnonceで生成された値を入れておき、それが正当ならば ログイン、不当ならば非ログイン状態としておけばよいでしょう。

正当、不当な判定方法はいろいろあるけど、楽なのはsessionに nonceを補完しておくことですかね。
Posted by issei

カテゴリ: 雑記

コメント一覧

しかし、これはmongrel clusterでproductionモードではうまくいかないっぽい。うーむ。
Isami

プラグインの dynamic_session_expを入れる。 これに尽きるようです。 これはCGI::Sessionの仕様上どうにもならないということで。
Isami