在Rails2和Rails3应用程序之间共享会话

时间:2011-09-09 09:12:55

标签: ruby-on-rails-3 ruby-on-rails-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对会话密钥使用相同数据类型的任何建议吗?

1 个答案:

答案 0 :(得分: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