狐の王国

人は誰でも心に王国を持っている。

Rails 2.3系列のsession_optionsの設定の仕方がわかりにくい件

えーと例によってRuby on Railsのいつものことながらドキュメントがあるのかないのか分からないというかなんというか黒魔術ですが何かもいいかげんにしろ的アレなのだが、2.3になってからsession_optionsの書き換え方が変わったらしくてjpmobileなどで困ったことになってへにょろもげーな感じなのである。

以前は、application.rbに

  session :session_key => '_MyApp_session'
  session :cookie_only => false

なんて設定してれば良かったのだがこれが効かなくなった。
ぐぐって見ると以下のような記述もあるのだが、

  session_options['session_key'] = '_MyApp_session'
  session_options['cookie_only'] = false

どうもこれは間違いっぽい? 2.3初期ではこれでもいけたのかな? 少なくとも2.3.3/2.3.4ではこれは効かなくて、actionpackのsession_managemant.rbを見てみると、

# Returns the hash used to configure the session. Example use:
#
# ActionController::Base.session_options[:secure] = true # session only available over HTTPS

なんてコメントがある。つまり……

  ActionController::Base.session_options[:key] = '_MyApp_session'
  ActionController::Base.session_options[:cookie_only] = false

というのをapplication_controller.rbに書いてやる必要があるようだ。

なんで親クラスを明示しなきゃならんのかはまだよく分かってないのだが、ともかくこれでsession_optionsを書き換えられる様子。むー。

原因究明に力をお貸しくださったid:elm200さんに感謝!

Sugano `Koshian' Yoshihisa(E) <koshian@foxking.org>