(这是关于Ramaze.net框架的)
我在存储自定义对象时遇到了一些非常奇怪的问题
在会话中。我注意到只有物体上的属性
正在更新立即存储在会话中的。但是,如果
对象包含对其他对象的引用
如果会话中包含的直接对象
在请求期间没有更改。
只有在使用Ramaze::FileCache时,这个问题才变得明显
作为我的会话缓存后端。我认为这个问题是不是被掩盖了
使用内存中会话时出现的问题。
我发现问题是因为会议中的“浅拷贝”
在ramaze::session::hash method_中发现逻辑丢失
(lib/ramaze/current/session/hash.rb)。
作为一个快速测试,以确保我的想法是正确的,我评论了
“差异检查”,本质上是强制更新会话
每一次。
def method_missing(*args, &block)
old = @hash.dup
result = @hash.send(*args, &block)
#unless old == @hash
Cache.sessions[@session.session_id] = self
#end
result
end
这个小技巧解决了我的问题。现在我的问题是:
这是一个安全合理的解决方案吗?
我应该避免在会话中存储复杂/深层对象吗?
我有什么遗漏吗?
最佳答案
此问题已在最新的Ramaze(2009.04)中解决,如果问题仍然存在,请在Ramaze issue tracker处提交修补程序。
关于ruby - Ramaze session 中的复杂或深层对象存储中断了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/365903/