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 回答