web.config中的InProc模式 與 StateServer模式[轉]

開發asp.net應用時,修改web.config中的SessionState節點。web

 

<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="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的進程中。
缺點:易丟失,常常須要從新登陸 sql

StateServer模式
優勢:session狀態單獨存儲在一個進程中,不會由於iis或者應用的重啓而丟失狀態
缺點:獲取session狀態的速度比InProc慢一些,畢竟是兩個不一樣的進程。 服務器

在開發的時候,對應用有一點修改,就會致使應用的重啓,這時候若是使用InProc模式
,那麼每次都須要從新登陸,比較浪費時間.建議使用StateServer模式。並在iis裏面設置超時時間長一些。 cookie

注:使用StateServer模式的時候
一、要開啓「ASP.NET State Service」服務(設爲「自動」) session

二、若是stateConnectionString的值不是127.0.0.1或者localhost等表明本地地址的值,須要修改註冊表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters 節點 → 將 AllowRemoteConnection 的鍵值設置成「1」(1 爲容許遠程電腦的鏈接,0 表明禁止)→ 設置 Port (端口號) asp.net

三、session中存儲非序列化的對象,若是違反會拋出 沒法序列化會話狀態。在「StateServer」或「SQLServer」模式下,ASP.NET 將序列化會話狀態對象,所以不容許使用沒法序列化的對象或 MarshalByRef 對象。若是自定義會話狀態存儲在「Custom」模式下執行了相似的序列化,則適用一樣的限制。這樣的異常。若是向session存儲自定義的對象,那麼該對象的類上必定要加上[Serializable]註釋。less

 


inProc模式(缺省模式)tcp

它容許「無Cookie」的會話,以及在服務器以外存儲會話數據。ASP.NET會話狀態模塊在Web.config文件中像下面這樣配置:spa

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

在這個例子中,mode屬性設爲InProc(默認值),代表會話狀態要由ASP.NET存儲到內存中,並且不用Cookie來傳遞會話ID。採起這種方式,無論Cookie仍是隱藏表單字段都用不着了。.net

因此,即便網頁中沒有使用表單,也能加入會話。 可是這種方法,應用程序的狀態將依賴於 ASP.NET進程, 當IIS進程崩潰或者正常重啓時,保存在
進程中的狀態將丟失。

相關文章
相關標籤/搜索