2008-12-13 38 views
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 

這個小黑客修復了我的問題。現在我的問題是:

  1. 它是一個安全和合理的解決方案?
  2. 我應該避免在會話中存儲複雜/深層對象嗎?
  3. 有什麼我失蹤了嗎?

回答

2

此問題已在最新的Ramaze(2009.04)中解決,如果問題仍然存在,請在Ramaze issue tracker處提供補丁。