セッションの固定を避けるために、こちらのようにコマンド「reset_session」を使用しています。
コマンドを実行した後、新しく生成された session_id をデータベースに保存したいのですが、session[:session_id] が定義されていません。
簡単なテストを書きました:
class ApplicationController < ActionController::Base
protect_from_forgery
after_filter :after_test
def after_test
RAILS_DEFAULT_LOGGER.debug "Old Session: #{session.inspect}"
reset_session
session[:random_number] = ((rand*1000).to_i)
RAILS_DEFAULT_LOGGER.debug "New Session: #{session.inspect}"
end
end
2 つの conescutives ページの読み込みのログの結果は次のとおりです。
Started GET "/" for 127.0.0.1 at 2011-04-16 11:42:57 +0200
Processing by WelcomeController#index as HTML
Rendered welcome/index.html.erb within layouts/application (1.9ms)
Old Session: {"random_number"=>519, "session_id"=>"d17df62e286f20bd25e2714ee4f58020", "_csrf_token"=>"NkD5ZjG/RYLolfRy0ADmr+h+Sp2TXEOQlc6HhNpyp/g="}
New Session: {:random_number=>172}
Completed 200 OK in 7ms (Views: 6.4ms | ActiveRecord: 0.0ms)
と
Started GET "/" for 127.0.0.1 at 2011-04-16 11:42:58 +0200
Processing by WelcomeController#index as HTML
Rendered welcome/index.html.erb within layouts/application (2.0ms)
Old Session: {"random_number"=>172, "session_id"=>"54f46f520c80044a9f5475af78a05502", "_csrf_token"=>"9skbBEN35jQYRgH9oQVz1D5Hsi/o9l7fm7Qx9XDNETc="}
New Session: {:random_number=>497}
Completed 200 OK in 7ms (Views: 6.4ms | ActiveRecord: 0.0ms)
ご覧のとおり、乱数 (172) は 2 番目のページに適切に渡されますが、新しいセッションには新しいセッション ID が表示されません。
「after_filter」の後に新しいセッション ID (「54f46f520c80044a9f5475af78a05502」) が生成されると思いますが、取得方法がわかりません。