Rails3.0.3でcookie_only => falseの指定を指定するときの注意
Rails3.0.3でsession_optionsの設定にcookie_only => falseを指定するとき、ちょっとした注意が必要になります。
cookie_only => false を指定すると、クッキーからセッションIDが拾えなかった場合、paramsからセッションIDを取得しようとします。
actionpack-3.0.3/lib/action_dispatch/middleware/session/abstract_store.rb
def extract_session_id(env)
stale_session_check! do
request = ActionDispatch::Request.new(env)
sid = request.cookies[@key]
sid ||= request.params[@key] unless @cookie_only
sid
end
end
paramsにアクセスするためにrequest.paramsがコールされますが、この際、
env[“action_dispatch.request.parameters”]に生成したparamsが保持されます。
そして以降、paramsを取得するときはこれを使用するのですが、そのためにRack内で後ほどマージされる予定だったcontroller と action の情報が params に含まれなくなってしまいます。
解決策としてはalias_method_chainなどを使って extract_session_id をちょっと修正し、処理後に
env[“action_dispatch.request.parameters”]をnilにしてあげればOKです。