• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

ブラウザ以外のUserAgentからRailsアプリケーションにリクエストを送る場合、Railsが管理しているsessionの仕組みとは別に、自分でセッションをセットアップしたくなる事があります。

そのような場合は、たとえばクエリパラメータからsession_idを渡したりするのですが、GET methodで受け渡したsession_idからRailsのsessionを再現するためには、以下のように記述します。

ruby_on_rails>>
FooController < ApplicationController
session :off, :if => (proc do |req|
return false unless req.parameters[:action] == 'bar'
if req.parameters[:session_id]
@original_session_options = req.session_options
req.session_options[:session_id] = req.parameters[:session_id]
end
false
end)
prepend_before_filter :only => 'bar' do
if @original_session_options
@original_session_options[:session_id] = nil
end
end
<<--

before_filterを使っていないのは、before_filterでは
Railsのsession処理に間に合わないためです。

更新履歴

  • 2007/11/20 不具合があったため内容を修正しました
posted by genki genki on Tue 20 Nov 2007 at 15:42 with 0 comments