【问题标题】:Complex or Deep Object Storage in Ramaze Session is Broken?Ramaze 会话中的复杂或深层对象存储被破坏?
【发布时间】:2009-04-29 20:12:51
【问题描述】:

(这是关于 Ramaze.net 框架的)

我在存储自定义对象时遇到了一些非常奇怪的问题 在会话中。我注意到只有对象的属性 立即存储在会话中正在更新。然而,如果那些 对象包含对其他对象的引用,那些被引用的对象 如果会话中包含直接对象,则对象未更新 在请求期间没有更改。

这个问题只有在我使用 Ramaze::FileCache 时才变得明显 作为我的会话缓存后端。我相信问题是否被掩盖 使用内存会话时的问题。

我发现问题是由于会话中的“浅拷贝” Ramaze::Session::Hash#method_missing 中的逻辑 (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

这个小技巧解决了我的问题。现在我的问题是:

  1. 是安全合理的解决方案吗?
  2. 我应该避免在会话中存储复杂/深层对象吗?
  3. 我有什么遗漏吗?

【问题讨论】:

    标签: ruby session ramaze


    【解决方案1】:

    此问题已在最新的 Ramaze (2009.04) 中解决,如果问题仍然存在,请在Ramaze issue tracker 提交补丁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2023-03-04
      • 2013-10-31
      • 2012-07-24
      • 2011-09-19
      相关资源
      最近更新 更多