ASP.NET中Session丟失原因與解決方案小結(jié)_.Net教程
推薦:在ASP.NET ORACLE添加數(shù)據(jù)記錄并讓ID自動(dòng)增量 在ASP.NET ORACLE添加數(shù)據(jù)記錄并讓ID自動(dòng)增量需要在ORACLE中設(shè)序列和觸發(fā)器即可,切記不是索引,ASP.NET中不管ID,具體如下: 1、建立序列: CREATE SEQUENCE seq_emergency_id
win2003 server下的IIS6默認(rèn)設(shè)置下對(duì)每個(gè)運(yùn)行在默認(rèn)應(yīng)用池中的工作者進(jìn)程都會(huì)經(jīng)過(guò)20多個(gè)小時(shí)后自動(dòng)回收該進(jìn)程,造成保存在該進(jìn)程中的session丟失。
因?yàn)镾ession,Application等數(shù)據(jù)默認(rèn)保存在運(yùn)行該Web應(yīng)用程序的工作者進(jìn)程中,如果回收工作者進(jìn)程,則會(huì)造成丟失。
解決辦法:
修改配置,設(shè)置為不定時(shí)自動(dòng)回收該工作者進(jìn)程,比如設(shè)置為當(dāng)超出占用現(xiàn)有物理內(nèi)存60%后自動(dòng)回收該進(jìn)程。通過(guò)使用默認(rèn)應(yīng)用程序池,可以確保多個(gè)應(yīng)用程序間互相隔離,保證由于一個(gè)應(yīng)用程序的崩潰不會(huì)影響另外的Web應(yīng)用程序。還可以使一個(gè)獨(dú)立的應(yīng)用程序運(yùn)行在一個(gè)指定的用戶(hù)帳號(hào)特權(quán)之下。
如果使用StateServer方式或者Sql Server數(shù)據(jù)庫(kù)方式來(lái)保存Session,則不受該設(shè)置的影響。
可能的原因2:
系統(tǒng)要運(yùn)行在負(fù)載平衡的 Web 場(chǎng)環(huán)境中,而系統(tǒng)配置文件web.config中的Session狀態(tài)卻設(shè)置為InProc(即在本地存儲(chǔ)會(huì)話(huà)狀態(tài)),導(dǎo)至在用戶(hù)訪(fǎng)問(wèn)量大時(shí),Session常經(jīng)超時(shí)的情況。引起這個(gè)現(xiàn)象的原因主要是因?yàn)橛脩?hù)通過(guò)負(fù)載平衡IP來(lái)訪(fǎng)問(wèn)WEB應(yīng)用系統(tǒng),某段時(shí)候在某臺(tái)服務(wù)器保存了Session的會(huì)話(huà)狀態(tài),但在其它的WEB前端服務(wù)器中卻沒(méi)有保存Session的會(huì)話(huà)狀態(tài),而隨著并發(fā)量的增大,負(fù)載平衡會(huì)當(dāng)作路由隨時(shí)訪(fǎng)問(wèn)空閑的服務(wù)器,結(jié)果空閑的服務(wù)器并沒(méi)有之前保存的Session會(huì)話(huà)狀態(tài)。
解決辦法:
1.當(dāng)您在負(fù)載平衡的 Web 場(chǎng)環(huán)境中運(yùn)行 ASP.NET Web 應(yīng)用程序時(shí),一定要使用 SqlServer 或 StateServer 會(huì)話(huà)狀態(tài)模式,在項(xiàng)目中我們基于性能考慮并沒(méi)有選擇SqlServer模式來(lái)存儲(chǔ)Session狀態(tài),而是選擇一臺(tái)SessionStateServer 服務(wù)器來(lái)用戶(hù)的Session會(huì)話(huà)狀態(tài)。我們要在系統(tǒng)配置文件web.config中設(shè)置如下:
<sessionState mode="StateServer" cookieless="false" timeout="240" stateConnectionString="tcpip=192.168.0.1:42424" stateNetworkTimeout="14400" />
還要添加一項(xiàng)
<machineKey validationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4" decryptionKey="5FC88DFC24EA123C" validation="SHA1"/>
2. 我們同時(shí)還要在SessionStateServer 服務(wù)器中啟動(dòng)ASP.NET State Service服務(wù),具體設(shè)置:控制面板>>管理工具>>服務(wù)>>ASP.NET State Service,把它設(shè)為自動(dòng)啟動(dòng)即可。
3. 每臺(tái)前端WEB服務(wù)的Microsoft“Internet 信息服務(wù)”(IIS)設(shè)置
要在 Web 場(chǎng)中的不同 Web 服務(wù)器間維護(hù)會(huì)話(huà)狀態(tài),Microsoft“Internet 信息服務(wù)”(IIS) 配置數(shù)據(jù)庫(kù)中 Web 站點(diǎn)的應(yīng)用程序路徑(例如,\LM\W3SVC\2)與 Web 場(chǎng)中所有 Web 服務(wù)器必須相同。大小寫(xiě)也必須相同,因?yàn)閼?yīng)用程序路徑是區(qū)分大小寫(xiě)的。在一臺(tái) Web 服務(wù)器上,承載 ASP.NET 應(yīng)用程序的 Web 站點(diǎn)的實(shí)例 ID 可能是 2(其中應(yīng)用程序路徑是 \LM\W3SVC\2)。在另一臺(tái) Web 服務(wù)器上,Web 站點(diǎn)的實(shí)例 ID 可能是 3(其中應(yīng)用程序路徑是 \LM\W3SVC\3)。因此,Web 場(chǎng)中的 Web 服務(wù)器之間的應(yīng)用程序路徑是不同的。我們必須使Web 場(chǎng)Web 站點(diǎn)的實(shí)例 ID 相同即可。你可以在IIS中把某一個(gè)WEB配置信息保存為一個(gè)文件,其他Web 服務(wù)器的IIS配置可以來(lái)自這一個(gè)文件。
分享:ASP.NET頁(yè)面事件:順序與回傳詳解 一、初始化 ·當(dāng)頁(yè)面被提交請(qǐng)求第一個(gè)方法永遠(yuǎn)是構(gòu)造函數(shù)。您可以在構(gòu)造函數(shù)里面初始一些自定義屬性或?qū)ο�,不過(guò)這時(shí)候因?yàn)轫?yè)面還沒(méi)有被完全初始化所以多少會(huì)有些限制。特別地
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶(hù)端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-ASP.NET中Session丟失原因與解決方案小結(jié)
。