Session容易丟失的一些常見解決辦法
預設配置情況下,Web.Config檔案中關於Session的設定如下:
<sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;
Trusted_Connection=yes' cookieless='true' timeout='60'/>
我們會發現sessionState標籤中有個屬性mode,它可以有3種取值:InProc、StateServer,SQLServer(注意大小寫) 。
預設情況下是InProc,也就是將Session儲存在程式內(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),這個程式不穩定,
在某些事件發生時(比如防毒軟體等),程式會重起,所以造成了儲存在該程式內的Session丟失。
解決辦法:不用要InProc模式,而採用StateServer模式,同時將服務中的"ASP.NET 狀態服務"設定為自動啟用,這樣的話,
session就不依賴於某一程式了。
<sessionState mode="StateServer" cookieless="false" timeout="20000" />
Session丟失已經是一種習以為常的問題了,在自己知道如何解決這一問題後,我也不吝嗇共享出給大家知道。
解決session丟失的問題有兩種方法:
1)將session儲存在一臺sate server中。
2)將session儲存在sql server中。這種方法使用的比較少,所以選擇了第一種方法。
首先根據網上查的資料對webconfig檔案中session部分進行修改。如下:
<sessionState mode="StateServer" cookieless="false" timeout="240" stateCtateNetworkTimeout="14400" />
再在10.164.222.122 這臺電腦上的asp.net state server 服務啟動
基本上就行了。體驗一下。
了一個測試程式,在3個小時以後session仍然可用,更絕的是我的電腦都重起了,在其它電腦上開啟的網頁中session仍然可用。一番體驗以後,感覺還真不錯。
.NET Framework 常規參考
<sessionState> 元素
為當前應用程式配置會話狀態設定。
<configuration>
<system.web>
<sessionState>
<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateC
sqlC
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 指定連線字串。飛飛Asp技術.樂園例如“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 屬性。例如,stateC。
使用 SQLServer 模式
在執行 SQL Server 的計算機(它將儲存會話狀態)上執行 InstallSqlState.sql(預設的安裝位置為 <驅動器>:\systemroot\Microsoft.NET\Framework\version)。這將建立一個名為 ASPState 的資料庫,該資料庫具有新的儲存過程並且在 TempDB 資料庫中具有 ASPStateTempApplications 表和 ASPStateTempSessions 表。
在應用程式的 Web.config 檔案中,設定 mode=SQLServer 並設定 sqlConnectionString 屬性。例如,sqlC。飛飛!Asp技術樂園
示例
以下示例指定若干會話狀態配置設定。
<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"
stateC
sqlC
cookieless="false"
timeout="30"
/>
+ 注:只適用於支援asp.net的使用者。
相關文章
- session丟失與解決辦法的資料Session
- Session莫名丟失的原因及解決辦法Session
- Session丟失的解決辦法小結 (轉)Session
- asp.net Session丟失的解決辦法小結ASP.NETSession
- PHP中SESSION丟失(不能跨頁面傳遞)解決辦法PHPSession
- mysql丟失root密碼的解決辦法MySql密碼
- Linux root密碼丟失的解決辦法Linux密碼
- CentOS 常見異常及解決辦法CentOS
- ntldr is missing怎麼解決 ntldr丟失的解決辦法
- Hive常見的bug與解決辦法。Hive
- 常見等待事件的分析解決辦法事件
- AWS建立AMI映像資料丟失解決辦法
- 常見的heimao技術及解決辦法
- 丟失Oracle中資料檔案Ora時的解決辦法Oracle
- 網路卡常見故障及解決辦法
- Ceph的客戶端丟失資料夾的解決辦法客戶端
- 各類系統ROOT密碼丟失解決辦法密碼
- 請問 django admin 介面 css 丟失解決辦法?DjangoCSS
- vuex頁面重新整理資料丟失的解決辦法Vue
- 伺服器常見故障及解決辦法伺服器
- CPU常見小故障原因與解決辦法
- nginx部署後常見問題解決辦法Nginx
- CSS元素高度塌陷的幾種常見解決辦法!CSS
- 常見印表機故障的一般解決辦法
- 路由器常見故障的原因與解決辦法路由器
- Vmware vSphere常見問題及解決辦法
- 常見電腦硬碟故障彙總 常見電腦硬碟故障的解決辦法硬碟
- 淺談常見的行動硬碟無法識別的解決辦法硬碟
- 系統檔案丟失怎麼辦 系統檔案損壞的解決辦法
- Redis SortedSet結構score欄位丟失精度問題解決辦法Redis
- 丟失msvcr120_clr0400.dll解決辦法標題
- PHP7中session的值跨頁傳遞失敗的解決辦法PHPSession
- hibernate open session in view 丟擲異常解決方法SessionView
- 電腦顯示器常見故障的原因與解決辦法
- STM32傳送串列埠資料丟失位元組的解決辦法串列埠
- IE6中的常見BUG與相應的解決辦法
- struts中session丟失Session
- Redis常見問題和解決辦法梳理Redis