ruby - Ramaze Session 中的复杂或深层对象存储坏了?

标签 ruby session ramaze

(这是关于 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

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

  1. 这是一个安全合理的解决方案吗?
  2. 我是否应该避免在 session 中存储复杂/深层对象?
  3. 有什么我想念的吗?

最佳答案

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

关于ruby - Ramaze Session 中的复杂或深层对象存储坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365903/

相关文章:

security - 使用 javax.faces.STATE_SAVING_METHOD 在客户端保存 session 的含义

ruby - 为什么 Sequel 不写入我的数据库表?

ruby - Thin 与 Ramaze 发生严重碰撞

Ruby 1.9 Ramaze 应用程序失败并显示 "Illegal instruction"

ruby-on-rails - 一个 has_many :through Relationship 的 Rails RSpec 测试

ruby-on-rails - Ruby on Rails 截断阅读更多

php - 从 Jquery 获取 PHP $_SESSION 变量?

ruby - Sass 编码::兼容性错误

ruby - 如何在命名空间类中包含模块?

php - 从 symfony 2 访问所有存储的 session ?