2
(这是关于Ramaze.net框架)Ramaze Session中的复杂或深度对象存储被破坏?
我遇到了一些非常奇怪的问题,同时在会话中存储自定义对象 。我注意到只有立即存储在会话中的对象 上的属性正在更新。但是,如果这些 对象包含对其他对象的引用,那么如果在请求期间会话 中包含的直接对象没有更改,那么引用的 对象不会更新。
当我使用Ramaze :: FileCache 作为会话缓存后端时,这个问题才变得明显。我相信这个问题在使用内存中会话时被屏蔽或不是 问题。
我发现这个问题是因为 “浅拷贝” 在Ramaze发现会话 逻辑::会议::哈希#method_missing的 (LIB/ramaze /电流/会话/ 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
这个小黑客修复了我的问题。现在我的问题是:
- 它是一个安全和合理的解决方案?
- 我应该避免在会话中存储复杂/深层对象吗?
- 有什么我失踪了吗?