我很抱歉如果之前已經問過這個問題,但是我還沒有完全發現我頭腦中的具體問題。在ASP.NET中使用會話變量的替代方法(包括MVC)
對於我建立的網站(使用ASP.NET MVC) - 性能是一個重要特性。此外,該站點有可能託管在應用程序池每20分鐘回收一次的環境中(或者如果達到內存閾值,則更快)。我想完全獨立於依賴會話變量,而是將類似GUID的值存儲在cookie中。我的推理是 - 我不知道會話會持續多長時間,因爲AppPool回收,並且不希望他們的會話過早超時並導致他們不得不重複登錄。
Cookie中的GUID值將用作存儲會話狀信息(用戶ID值等)的表的查找鍵。所以如果我需要這些數據,我可以從數據庫中檢索它。我仍然會利用Session_OnEnd事件來清除會話表中的「最後一次活動」值超過20分鐘(或者無論長時間的會話是否配置爲最後一次)。所以我想我仍然會使用會話狀態,而不是會話變量。
我的擔心雖然也是關於表現。因此,我很好奇是否有更好的方法避免使用會話變量,同時仍然保持瞭解用戶身份的能力,並以「會話式」的方式管理他們對網站的訪問。我仍然是MVC的新手,但多年來在ASP.NET中有豐富的經驗,所以我希望我的問題很有意義!
編輯:我有點回避想要使用SQL會話狀態,因爲我可能會在共享的SQL服務器託管環境中,並不認爲我將有一個能夠創建/運行作業的登錄如果有必要刪除過期的SQL會話數據等。在AppPool回收場景中,根據Session_OnEnd和Cookie使用是否存在真正的缺點?當AppPool回收時,Session_OnEnd會不會執行當前會話?
否則稱爲SQL和Cookies。 – madcolor 2009-12-08 18:55:32
+1:如果你使用SQL狀態持久性,你不必滾動自己的數據庫 – 2009-12-08 18:55:58
http://www.dbazine.com/sql/sql-articles/cook9 – madcolor 2009-12-08 19:06:42