2009-10-30 73 views
11

在過去幾年裏,將整個會話存儲在cookie中已經成爲Rails的標準 - 是否有一種簡單的方法可以實現與ASP MVC類似的功能?使用Cookie在ASP中存儲會話MVC

默認情況下,Session/TempData中的任何內容都存儲在服務器的內存中。在web.config中,可以將其更改爲SQL Store/Server端緩存。我希望能夠將這些對象保存在cookie中。

看起來我可以實現自定義會話狀態存儲提供程序。有一個更簡單的方法嗎?

+1

您是否打算在cookie中鍵入'整個會話'? – codeulike 2009-10-30 18:03:38

+0

是的 - 謝謝 – 2009-10-30 18:12:31

回答

4

是的,執行custom state session-provider。不,afaik沒有簡單的方法。

Ps。它不像看起來那麼糟糕,即>odbc sample的一半寫入數據庫。

+0

接下來,我實現了一個自定義狀態會話提供程序,它的確很簡單。 感謝您的幫助。 – 2009-11-17 07:15:39

-2

取決於你想,如果你想在cookie中存儲,只存儲字符串什麼樣的數據,下面的代碼將做到:

HttpCookie cookie = new HttpCookie("username","sth"); 
      cookie.HttpOnly = true; 
      cookie.Expires = DateTime.Now.AddMonths(3); 
      HttpContext.Current.Response.Cookies.Add(cookie); 
-1

你不應該使用會話這一點,但配置文件代替。配置文件使用cookies來匹配計算機型材等型材密鑰存儲在cookie中,並在這裏關閉瀏覽器等

信息時不丟失; http://odetocode.com/articles/440.aspx

2

我強烈建議不要將整個會話存儲在cookie中。它有不良的性能影響。考慮一下:每個請求(對每個資源)都會包含可能過時的數據的開銷,您只需要一次或兩次。最終這種開銷會影響您的用戶,您的帶寬和您的網站性能。

下面是一個例子:

GET/HTTP/1.1 
Host: localhost 
OtherUsefulHeaders: foo 
Cookie: YourSessionState=... 

初始請求大小約爲200個字節。比方說,你在會話中添加了大約100個字節。現在的大小是300字節,開銷是〜30%。您再添加100個字節,開銷爲50%。這意味着它大致需要兩次發送請求和兩個帶寬。

你還是看看cookie-based TempData implementation,因爲它有更小的內存,實際上是有道理的。

+1

如何通過TempData維護會話信息(通過cookie存儲實現)更快?還有維護TempData的額外代碼開銷。 一個會話應該相當輕鬆 - 在我們的例子中它是幾十個字節 - 所以請求的開銷應該是最小的。 基於cookie的會話存儲在2007年被Rails採納爲標準。本文討論他們爲什麼會這樣做。 http://ryandaigle.com/articles/2007/2/21/what-s-new-in-edge-rails-cookie-based-sessions – 2009-11-10 19:01:08

+1

我對Rails社區感到非常高興,但我的觀點是根據統計數據:http://yuiblog.com/blog/2007/03/01/performance-research-part-3/。 TempData比會話更有優勢,因爲它的開銷僅適用一次 - 在頁面往返中。否則,餅乾應該乾淨。 無論如何,在web場場的痛苦經歷之後,我根本不使用Session,這不值得。 – DreamSonic 2009-11-10 23:49:21

+0

您現在使用什麼方法來處理會話狀態?我會認爲會話對象(無論是否處理)或cookie是唯一的選擇? – UpTheCreek 2011-01-05 19:35:27

5

我認爲這將是更有效,只是存儲在cookie中的會話ID(散列或其他),然後使用該ID從內存/數據庫/你喜歡的任何存儲獲取會話數據。在cookie中保持完整的會話狀態會增加必要的帶寬。另外,請記住安全:如果cookie包含身份驗證信息或其他敏感數據,並且您不小心,它可能很容易被用戶黑客攻擊以獲取特權或以其他方式混淆您的應用程序(加密數據很糟糕因爲那樣你必須對加密數據進行base-64編碼,這進一步浪費了帶寬和處理時間)。你應該從來沒有信任來自用戶的輸入。

+0

在這種情況下是否需要自定義會話狀態存儲或者在web.config中禁用會話纔有意義? – 2011-01-16 20:19:59