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

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

   1  FooController < ApplicationController
   2    session :off, :if => (proc do |req|
   3      return false unless req.parameters[:action] == 'bar'
   4      if req.parameters[:session_id]
   5        @original_session_options = req.session_options
   6        req.session_options[:session_id] = req.parameters[:session_id]
   7      end
   8      false
   9    end)
  10    prepend_before_filter :only => 'bar' do
  11      if @original_session_options
  12        @original_session_options[:session_id] = nil
  13      end
  14    end

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

更新履歴

  • 2007/11/20 不具合があったため内容を修正しました
posted by Png genki on Tue 20 Nov 2007 at 04:17
Contents
Railsのsessionを自分でセットアップする方法
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ