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