ASP.NET中Session的狀態保持方式
發表于:2007-09-07來源:作者:點擊數:
標簽:
ASP.NET提供了Session對象,從而允許 程序員 識別、存儲和處理同一個瀏覽器對象對 服務器 上某個特定 網絡 應用程序的若干次請求的上下文信息。Session對應瀏覽器與服務器的同一次對話,在瀏覽器第一請求網絡應用程序的某個頁面時,服務器會觸發Session_onSt
ASP.NET提供了Session對象,從而允許
程序員識別、存儲和處理同一個瀏覽器對象對
服務器上某個特定
網絡應用程序的若干次請求的上下文信息。Session對應瀏覽器與服務器的同一次對話,在瀏覽器第一請求網絡應用程序的某個頁面時,服務器會觸發Session_onStart事件;在對話超時或者被關閉的時候會觸發Session_onEnd 事件。程序員可以在代碼中響應這兩個事件來處理與同一次對話相關的任務,如開辟和釋放該次對話要使用的資源等?! ?
在ASP.NET的程序中要使用Session對象時,必須確保頁面的@page指令中EnableSessionState屬性是True或者Readonly,并且在web.config文件中正確的設置了SessionState屬性?! ?
ASP.NET中Session的狀態保持是由web.config文件中的
標記下的標記的mode屬性來決定的。該屬性有四種可能的值:Off、Inproc、StateServer和SQlServer.
設為Off會禁用Session.
Inproc是缺省的設置,這種模式和以前的ASP的會話狀態的方法是類似的,會話的狀態會被保存在ASP.NET進程中,它的優點是顯而易見的:性能。進程內的數據訪問自然會比夸進程的訪問快。然而,這種方法Session的狀態依賴于ASP.NET進程,當IIS進程崩潰或者正常重起啟時,保存在進程中的狀態將丟失?! ?
為了克服Inproc模式的缺點,ASP.NET提供了兩種進程外保持會話狀態的方法?! ?
ASP.NET首先提供了提供了一個Windows服務:ASPState,這個服務啟動后,ASP.NET應用程序可以將mode屬性設置為“SateServer”,來使用這個Windows服務提供的狀態管理方法?! ?
除了在web.config文件中設置mode屬性為StateServer外,還必須設置運行StateServer服務器的IP地址和端口號.如果在IIS所在的機器運行StateServer則IP地址就是127.0.0.1,端口號通常是42424.配置如下:
mode=”StateServer”
stateConnectionString="tcpip=127.0.0.1:42424"
使用這種模式,會話狀態的存儲將不依賴IIS進程的失敗或者重啟,會話的狀態將存儲在StateServer進程的內存空間中?! ?
|
原文轉自:http://www.anti-gravitydesign.com