2012-09-27 43 views
1

我正在尋找一種方法在ASP.NET中完全基於Cookie的會話。我不打算存儲複雜的對象,只是字符串鍵值對。ASP.NET基於cookie的會話,有SessionStateModule嗎?

我在尋找類似於Play的東西!框架處理會話,它基本上將cookie中的所有會話數據編碼,並負責在每個請求上對其進行加密/解密。

我不想爲自己編寫自己的SessionStateModule,如果我能避免它,是否存在?

感謝

編輯:我並不需要存儲更多的數據比一個cookie可以處理(短短標識符),我仍然需要鍵值對具體到每個會話。我想使用cookie,這樣就不需要維護任何服務器狀態(在進程中或在數據庫中),這允許我很容易地添加更多的服務器,並且也更少依賴外部應用程序(沒有狀態服務器/ memcached/redis等)

+0

瀏覽器將只支持少量的cookie。如果我們開始創建更多,可能會丟失會話cookie或一些重要的cookie。 –

+0

我正在討論創建一個cookie,並對其中的所有數據進行編碼。究竟是怎麼玩!框架會議的工作 –

回答

0

除非您要創建大量數據,否則無法將這麼多數據存儲在cookie中。

鑑於您希望使用鍵緩存值對來考慮使用緩存,如memcached或redis。如果你不在網絡農場,甚至是服務器緩存?

0

我不認爲存在這樣的問題:由於使用cookie固有的限制(特別是最大尺寸),它會太脆弱。

我知道這不是回答你的問題,但我不會爲此執行SessionStateModule。這樣做意味着任何使用Session的第三方組件或任何使用Session的未來維護程序員都可能在Cookie中存儲不適當的數據(例如太大)。

我建議你編寫自己的面向API的API,在你的cookie中存儲只有原始值(字符串,Int32,DateTime,...)的鍵值對。

您還可以使API「cookie識別」 - 例如,設置HttpCookie.Path它給你的可能性:

  • 避免發送的cookie不需要他們請求(JavaScript,圖片,...)

  • 有不同的Cookie(名稱相同,但不同的路徑)爲您的應用程序的不同區域。這可以幫助保持cookie的大小。