(这是关于 Ramaze.net 框架的)
我在存储自定义对象时遇到了一些非常奇怪的问题 在 session 中。我注意到只有对象上的属性 立即存储在 session 中正在更新。然而,如果那些 对象包含对其他对象的引用,那些引用 如果 session 中包含直接对象,则对象未更新 在请求期间没有改变。
这个问题只有在我使用 Ramaze::FileCache 时才变得明显 作为我的 session 缓存后端。我相信问题是否被掩盖了 使用内存 session 时的一个问题。
我发现问题是因为 session 中的“浅拷贝” Ramaze::Session::Hash#method_missing 中的逻辑 (lib/ramaze/current/session/hash.rb).
作为确保我的想法正确的快速测试,我注释掉了 “差异检查”,本质上是强制更新 session 每次。
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
这个小技巧解决了我的问题。现在我的问题是:
- 这是一个安全合理的解决方案吗?
- 我是否应该避免在 session 中存储复杂/深层对象?
- 有什么我想念的吗?
最佳答案
此问题已在最新的Ramaze (2009.04) 中解决,请在Ramaze issue tracker 提交补丁。如果问题仍然存在。
关于ruby - Ramaze Session 中的复杂或深层对象存储坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365903/