ブラウザ以外のUserAgentからRailsアプリケーションにリクエストを送る場合、Railsが管理しているsessionの仕組みとは別に、自分でセッションをセットアップしたくなる事があります。
そのような場合は、たとえばクエリパラメータからsession_id
を渡したりするのですが、GET methodで受け渡したsession_id
からRailsのsessionを再現するためには、以下のように記述します。
1 FooController < Applicatio nControlle r 2 session :off, :if => (proc do |req| 3 return false unless req.parameters [:action] == 'bar' 4 if req.parameters [:session_id ] 5 @original_s ession_opt ions = req.session_op tions 6 req.session_op tions[:session_id ] = req.parameters [:session_id ] 7 end 8 false 9 end) 10 prepend_be fore_filte r :only => 'bar' do 11 if @original_s ession_opt ions 12 @original_s ession_opt ions[:session_id ] = nil 13 end 14 end
before_fil
を使っていないのは、before_fil
では
Railsのsession処理に間に合わないためです。
更新履歴
- 2007/11/20
不具合があったため内容を修正しました
posted by
genki
on Tue 20 Nov 2007
at 04:17