Ruby on rails 3 在Rails2和Rails3应用程序之间共享会话
我想使用会话cookie存储在Rails 2.3.14应用程序和Rails 3.0.10应用程序之间共享会话 我发现了一篇优秀的博客文章,解释了如何设置: 在Rails2将会话键存储为符号,而Rails3存储为字符串的问题出现之前,一切都很正常。此外,还提供了修补程序来修复此问题:Ruby on rails 3 在Rails2和Rails3应用程序之间共享会话,ruby-on-rails-3,ruby-on-rails-2,Ruby On Rails 3,Ruby On Rails 2,我想使用会话cookie存储在Rails 2.3.14应用程序和Rails 3.0.10应用程序之间共享会话 我发现了一篇优秀的博客文章,解释了如何设置: 在Rails2将会话键存储为符号,而Rails3存储为字符串的问题出现之前,一切都很正常。此外,还提供了修补程序来修复此问题: # lib/patches/cgi/session.rb require 'cgi/session' class CGI #:nodoc: class Session #:nodoc: def [](
# 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对会话密钥使用相同的数据类型,有什么建议吗?模块操作控制器
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
模块会话
类抽象存储
类SessionHash
或者,如果您希望修改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
模块操作控制器::会话
类抽象存储
类SessionHash
使用Rails 2或Rails 3应该没有区别,因为Cookie在浏览器中存储为字符串(文本文件)。使用符号或字符串获取/设置值并不重要。序列化可能已从2更改为3。你不能尽可能使用原始的方法吗?