Session丟失問題解決方案

.NET Framework 常規參考 
<sessionState> 元素 
爲當前應用程序配置會話狀態設置。 
<configuration> 
<system.web> 
<sessionState> 

<sessionState mode="Off|InProc|StateServer|SQLServer" 
cookieless="true|false" 
timeout="number of minutes" 
stateConnectionString="tcpip=server:port" 
sqlConnectionString="sql connection string" 
stateNetworkTimeout="number of seconds"/> 
必選屬性 
屬性 選項 說明 
mode 指定在哪裏存儲會話狀態。 
Off 指示會話狀態未啓用。 
InProc 指示在本地存儲會話狀態。 
StateServer 指示在遠程計算機上存儲會話狀態。 
SQLServer 指示在 SQL Server 上存儲會話狀態。 

可選屬性 
屬性 選項 說明 
cookieless 指定不具有 Cookie 的會話是否應用於標識客戶端會話。 
true 指示應使用不具有 Cookie 的會話。 
false 指示不應使用沒有 Cookie 的會話。默認值爲 false。 
timeout 指定在放棄一個會話前該會話可以處於空閒狀態的分鐘數。默認值爲 20。 
stateConnectionString 指定遠程存儲會話狀態的服務器名稱和端口。例如“tcpip=127.0.0.1:42424”。當 mode 爲 StateServer 時該屬性是必需的。 
sqlConnectionString 爲 SQL Server 指定連接字符串。例如“data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind”。當 mode 爲 SQLServer 時該屬性是必需的。 
stateNetworkTimeout 在使用 StateServer 模式存儲會話狀態時,指定在放棄會話之前 Web 服務器和狀態服務器之間的 TCP/IP 網絡連接空閒的時間(以秒爲單位)。默認值爲 10。 

備註 
使用 StateServer 模式 

確保運行 ASP.NET 狀態服務的服務器是要存儲會話狀態信息的遠程服務器。該服務與 ASP.NET 一起安裝,其默認位置爲 <驅動器>:\systemroot\Microsoft.NET\Framework\version \aspnet_state.exe。 
在應用程序的 Web.config 文件中,設置 mode=StateServer 並設置 stateConnectionString 屬性。例如,stateConnectionString="tcpip=sarath:42424"。 
使用 SQLServer 模式 

在運行 SQL Server 的計算機(它將存儲會話狀態)上運行 InstallSqlState.sql(默認的安裝位置爲 <驅動器>:\systemroot\Microsoft.NET\Framework\version)。這將創建一個名爲 ASPState 的數據庫,該數據庫具有新的存儲過程並且在 TempDB 數據庫中具有 ASPStateTempApplications 表和 ASPStateTempSessions 表。 
在應用程序的 Web.config 文件中,設置 mode=SQLServer 並設置 sqlConnectionString 屬性。例如,sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。 
示例 
以下示例指定若干會話狀態配置設置。 

<configuration> 
<system.web> 
<sessionState mode="InProc" 
cookieless="true" 
timeout="20"/> 
</sessionState> 
</system.web> 
</configuration> 
要求 
包含於:<system.web> 

Web 平臺:IIS 5.0、IIS 5.1、IIS 6.0 

配置文件:Machine.config、Web.config 

配置節處理程序:System.Web.SessionState.SessionStateSectionHandler 

請參見 
ASP.NET 配置 | ASP.NET 設置架構 | SessionStateModule

-------------------------------收集之二-------------------------
在Windows2003的服務器中的IIS6加入了應用程序池來回收一些無用的進程的功能,當由於網站程序的錯誤或訪問量太多的導致的應用程序池會自動回收該進程,防止網站進入“死機”狀態,而這時候的應用程序池的回收就會導致session變量被清除,就出現了 session變量不見的現象。 
爲了解決這種在Windows2003下才出現的問題,我們在服務端起動ASP.NET State Service服務,並且在系統的machine.config做了一些改動。現在默認的情況下會話狀態mode是StateServer。如果您的網站根目錄下也配有一個web.config配置文件,請把mode="InProc"改成mode="StateServer",如下代碼,就可以防止 session變量的丟失:
<sessionState 
mode="StateServer" 
stateConnectionString="tcpip=127.0.0.1:42424" 
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI" 
cookieless="false" 
timeout="30" 
/> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章