開發asp.net應用時,修改web.config中的SessionState節點。 stateserver模式: <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnection ...
開發asp.net應用時,修改web.config中的SessionState節點。
stateserver模式:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/> <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/> InProc模式: <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/> <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/>InProc模式
優點:獲取session狀態的速度快,session狀態直接存儲在iis的進程中。
缺點:易丟失,經常需要重新登錄
StateServer模式
優點:session狀態單獨存儲在一個進程中,不會因為iis或者應用的重啟而丟失狀態
缺點:獲取session狀態的速度比InProc慢一些,畢竟是兩個不同的進程。
在開發的時候,對應用有一點修改,就會導致應用的重啟,這時候如果使用InProc模式
,那麼每次都需要重新登錄,比較浪費時間.建議使用StateServer模式。併在iis裡面設置超時時間長一些。
註:使用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 (埠號)
3、session中存儲非序列化的對象,如果違反會拋出 無法序列化會話狀態。在“StateServer”或“SQLServer”模式下,ASP.NET 將序列化會話狀態對象,因此不允許使用無法序列化的對象或 MarshalByRef 對象。如果自定義會話狀態存儲在“Custom”模式下執行了類似的序列化,則適用同樣的限制。這樣的異常。如果向session存儲自定義的對象,那麼該對象的類上一定要加上[Serializable]註釋