2008-12-29 69 views
7

使用進程內會話狀態在擴展Web應用程序方面是不利的(對羣集不適用,服務器回收時彈出)。使用Cookie進行Web會話狀態 - 有哪些缺陷?

假設您只需要在會話狀態下保留少量信息,那麼爲此目的使用加密的cookie項目而不是特定的狀態服務器/ db的缺點是什麼?

很明顯,使用cookie會產生少量的網絡開銷,並且顯然你是在假設客戶端瀏覽器/移動設備上啓用了cookie的情況下運行的。

您可以通過方法看到其他哪些缺陷?

這對於簡單,可伸縮和健壯的會話來說是一個不錯的選擇嗎?

+0

取決於試圖存儲的內容 – Shawn 2008-12-29 22:46:20

+0

由於cookie將被加密,所以實際的cookie內容不應該那麼重要,更重要的是規模。思考? – 2008-12-29 22:49:43

回答

7

這是簡單,可擴展且健壯的會話的極好方法。 當然,你的加密的質量很重要,而且這往往是棘手的事情,但這是可能的。

我不同意其他一些海報:

,可以對可以對存儲在cookie中的會話密鑰啓動加密cookie值推出任何重放攻擊。如果這很重要,請使用https。

如果cookie被清除,存儲在狀態服務器或數據庫中的會話數據也會丟失;當會話密鑰丟失時,會話不能再被檢索。

2

另一個缺陷是,他們可以被盜取並在您的網站上重播。

順便說一句:與其將某些東西存儲在cookie中,您還應該考慮在cookie中存儲密鑰並使用類似memcached的內容(memcached可在多個服務器場中使用)。

+0

好點。這可以通過加密的時間戳cookie組件來抵制嗎? – 2008-12-29 23:05:31

2

通常,一個cookie用於會話ID,所以只要信息量很小,將信息存儲在cookie中是一個不錯的選擇,儘管你不應該存儲任何有價值的東西(比如CC號碼,SSN等)應該真的存儲在cookie中,即使加密。

我不是專家,但以我的經驗,我發現以下是真實的(至少使用PHP和ASP.Net)。

餅乾

  • [專業]秤好,因爲它是在每次請求發送
  • [專業]可所需的cookie只能通過SSL連接提交
  • [ pro]可以使用跨服務器技術和跨服務器機器
  • [con]數據在每個請求上傳輸並且響應SE
  • [CON]需要在瀏覽器

狀態服務器啓用/ DB

  • 只有在服務器上
  • [專業[專業]數據存儲]即使用戶清除cookie,數據仍然存在
  • [專業]可用於跨服務器技術
  • [CON]要求一個ID請求/響應被傳遞(因此需要Cookie或附加到每URL)
  • [CON]不很好地擴展默認模式,但是如果整個機器可以專門專門用於狀態,那麼這不是什麼問題。其他大量的縮放技術可用於可伸縮性。
  • [con]要求通過URL或Cookie或其他方式傳遞的會話ID變量,以保持用戶與數據綁定。
相關問題