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
這個小黑客修復了我的問題。現在我的問題是:
- 它是一個安全和合理的解決方案?
- 我應該避免在會話中存儲複雜/深層對象嗎?
- 有什麼我失蹤了嗎?