2010-11-09 59 views
6

我對Ruby on Rails(尤其是v3及更高版本)中會話生命週期的理解是,會話是在請求開始時爲每個請求創建的,並且如果該請求沒有攜帶現有的會話cookie新的會被創建,否則會話cookie被反序列化並存儲在會話哈希中。Rails會話是否可以「及時」創建?

這樣做的目的,當然支持了大量的安全功能,如跨站請求僞造等

然而,這造成一個有點問題,當涉及到的頁面緩存,或在現場與HTTP緩存服務和代理(如Varnish),因爲大多數配置都傾向於在請求和響應端去除這些(通常是全部)cookie(因爲緩存通常用於廣義受衆)。我知道可以設置清漆等來創建包含cookie詳細信息的對象哈希,這將範圍緩存的數據到該會話(併爲此用戶),但我想知道這是否是完全的必要。我有一個在自然界相當'靜態'的應用程序 - 內容從數據庫中提取,渲染成可以緩存的頁面 - 有幾個元素(比如註釋數量,最近的項目等等) )可以用ESI添加,但對於每一個請求,Rails仍然傾向於設置一個新的會話,並且當一個用戶已經有一個會話時,這個東西被緩存服務器剝離出來。

我想知道是否可以(通過預先存在的功能或自己構建功能)讓開發人員能夠控制什麼時候需要會話,並且只有當指定了back-and-forward時與餅乾,會話初始化/反序列化等必要的。

那個,或者我在思考這個問題的錯誤的方式,需要從另一個角度解決問題...

+0

如果你現在就離開它,並執行ajax調用來加載頁面的「用戶特定」部分,它是否工作? – 2011-01-21 20:46:35

回答

1

如果您的網站大多是靜態的,那麼你可能想使用完整的網頁CAC興。這完全將Rails從請求中解脫出來,讓Web服務器在內容生成後處理它。儘管評論很重要,但用戶的具體情況可能會根據您的具體需求而產生嚴重的麻煩。

相關問題