|
ASP.NET中的Session要比ASP中的Session靈活和強大很多,同時也復雜很多;看到有一些ASP.NET開發人員報怨說Session不穩定,莫名其妙的丟失,其實這正是ASP.NET改進的地方之一。
我們知道Session與Cookie最大的區別在于:Cookie信息全部存放于客戶端,Session則只是將一個ID存放在客戶端做為與服務端驗證的標記,而真正的數據都是放在服務端的內存之中的。
在傳統web編程語言(比如ASP)中,session的過期完全是按照TimeOut來老老實實處理的,超時值默認是20分鐘,但問題是:通常有很多用戶只看一眼網頁,然后就關瀏覽器走人了,這種情況下,服務端內存里還長久保存著Session的數據,如果這種用戶很多,對服務器資源無疑是一種浪費。
默認情況下,系統采用的是InProc模式,即進程內模式。這種情況下,Session是保存在ASP.NET工作進程映射的內存中的,問題是ASP.NET工作進程為了維護良好的平均性能,會被系統經常回收。我們在IIS里可以配置自動回收(比如按時間周期回收,或者當內存使用達到多少值時自動回收),如下圖即為IIS7中配置應用程序池回收參數的界面:
當ASP.NET工作進程被回收時,其映射的內存全部被清空并初始化,以便其它程序可以使用,所以Session也跟著一并消失了,就這是為什么Sesssion會無故消失的主要原因。
當然默認的InProc模式也是性能最高的一種模式,如果您不能忍受這種“不穩定”,可以在web.config中把mode設置為StateServer模式:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"></sessionState>
NET技術:ASP.NET中如何正確使用Session,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。