ASP.NET中Session的sessionState 4種mode模式


http://www.cnblogs.com/libingql/p/4675752.html

1. sessionState的4種mode模式

  在ASP.NET中Session的sessionState的4中mode模式:Off、InProc、StateServer及SqlServer。

2. Off模式

<sessionState mode="Off"></sessionState>

  關閉模式,即不需要使用Session。

單個頁面關閉Session:

<%@ Page EnableSessionState="false" %>

3. InProc模式(缺省模式)

<sessionState mode="InProc" cookieless="false" timeout="20"></sessionState>

mode設置為"InProc"時,Session直接存儲在IIS進程中。

  優點:獲取session狀態的速度快

  缺點:易丟失

mode為InProc可能造成Session丟失的情況:

  1>. ASP.NET進程(aspnet_wp.exe)、IIS進程(w3wp.exe)默認的20分鍾重啟應用程序;

  2>. 緩沖池填滿后重啟;

  3>. 進程保護措施重啟。

4. StateServer模式

mode設置為"StateServer"時,Session 存儲在單獨的內存緩沖區中,再由單獨一台服務器上運行的ASP.NET State Service(aspnet_state.exe)來控制這個緩沖區。

  優點:session狀態單獨存儲在一個進程中,不會因為iis或者應用的重啟而丟失狀態。

  缺點:

  1>. 由於是兩個不同的進程,獲取Session數據比InProc慢;

  2>. Session數據存儲在內存中,重啟ASP.NET State Service服務,Session數據將丟失。

<sessionState mode="StateServer" stateConnectionString="tcpip=tcpip=127.0.0.1:42424" cookieless="false" timeout="20"></sessionState>

  以上設置的ASP.NET State Service在127.0.0.1的42424端口(默認端口)上運行,要在服務器上改變端口,可編輯HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters注冊表項中的Port值。(打開注冊表方式:運行 regedit)

mode設置為"StateServer"需要注意:

  1>. 啟動ASP.NET State Service;

  2>. 如果stateConnectionString的值不是127.0.0.1或者localhost等代表本地地址的值,需要修改注冊表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters 節點 → 將 AllowRemoteConnection 的鍵值設置成“1”(1 為允許遠程電腦的連接,0 代表禁止)→ 設置 Port (端口號) 

5. SqlServer模式

  mode設置為"SqlServer"時,Session存儲在SQL Server數據庫中持久化保持,ASP.NET嘗試將會話數據存儲到由sqlConnectionString屬性(其中包含數據源以及登錄服務器所需的安全憑證)指定的SQL Server中。可應用場景:網絡負載均衡(NLB)環境。

設置SqlServer模式步驟:

  1>. 配置SQL erver創建ASPState數據庫

  創建ASPState數據庫,運行C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallSqlState.sql,可以通過SQL查詢分析器來執行語句,也可以使用sqlcmd來執行。

sqlcmd -S [server name] -U [user] -P [password] -i C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallSqlState.sql

此時SQLServer會創建數據庫ASPState,但是沒有表。

  若創建ASPState數據庫后要刪除,可以運行C:\Windows\Microsoft.NET\Framework\v4.0.30319\UninstallSqlState.sql,但要先停止w3svc進程。

net stop w3svc

  2>. ASPState創建表

aspnet_regsql.exe  -ssadd -sstype p -S [server name] -U [user] -P [password]

  運行cmd:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe  -ssadd -sstype p -S (local) -U sa -P '1'

  此時數據庫中創建兩張表:ASPStateTempApplications、ASPStateTempSessions。

  3>. 設置sessionState

<sessionState mode="SQLServer" sqlConnectionString="data source=127.0.0.1;user id=sa;password=1" cookieless="false" timeout="20"></sessionState>

由於數據不存儲在本地內存,存儲Session狀態的對象需要進行序列化和反序列化,以便通過網絡傳給數據庫服務器,以及從數據庫服務器傳回。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM