我想通过使用会话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对会话密钥使用相同数据类型的任何建议吗?
答案 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