2

セッション Cookie ストアを使用して、Rails 2.3.14 アプリと Rails 3.0.10 アプリの間でセッションを共有したいと考えています。

その設定方法を説明する優れたブログ投稿を見つけました: http://blog.kabisa.nl/2010/10/27/share-sessions-between-rails-2-and-rails-3-applications/

Rails2がセッションキーをシンボルとして保存し、Rails3を文字列として保存するという問題が発生するまで、すべて正常に機能します。また、これを修正するためのパッチが提供されています。

# lib/patches/cgi/session.rb
require 'cgi/session'

class CGI #:nodoc:
  class Session #:nodoc:
    def [](key)
      @data ||= @dbman.restore
      @data[key.to_s]
    end

    def []=(key, val)
      @write_lock ||= true
      @data ||= @dbman.restore
      @data[key.to_s] = val
    end
  end
end

このブログは 2010 年のもので、このパッチは Rails2.3.14 アプリでは機能していないようです。また、CGI が本当に非推奨になったことも読んだので、このパッチがまだ問題を解決する正しい方法であるかどうか疑問に思います。

Rails2 と Rails3 の両方がセッション キーに同じデータ型を使用していることを確認する方法はありますか?

4

1 に答える 1

1
module ActionController
  module Session
    class AbstractStore
      class SessionHash < Hash
        def [](key)
          load_for_read!
          super(key.to_s)
        end

        def []=(key, val)
          load_for_write!
          super(key.to_s, val)
        end
      end
    end
  end
end

または、2.3.8 を変更したい場合は、これを config/initializers/session_store.rb に追加できます。

module ActionController::Session
  class AbstractStore
    class SessionHash < Hash
       def [](key)
         load! unless @loaded
         super(key.to_s)
       end

       def []=(key, value)
         load! unless @loaded
         super(key.to_s, value)
       end
    end
  end
end
于 2012-03-22T23:56:27.453 に答える