ASP.NET Session超時(shí)問題解決方法總結(jié)
最近在做ASP.NET項(xiàng)目時(shí),測試網(wǎng)站老是取不出Session中的值,在網(wǎng)上搜索了一下,找到一些解決方法,記錄在這里。***使用存儲(chǔ)在StateServer中的辦法解決了問題。
SessionState 的Timeout(ASP.NET Session超時(shí)),其主要原因有三種
一:有些殺病毒軟件會(huì)去掃描您的Web.Config文件,那時(shí)Session肯定掉,這是微軟的說法。
二:程序內(nèi)部里有讓Session掉失的代碼,及服務(wù)器內(nèi)存不足產(chǎn)生的。
三:程序有框架頁面和跨域情況。
ASP.NET Session超時(shí)的***種解決辦法是:使殺病毒軟件屏蔽掃描Web.Config文件(程序運(yùn)行時(shí)自己也不要去編輯它)
第二種是檢查代碼有無Session.Abandon()之類的。
第三種是在Window服務(wù)中將ASP.NET State Service 啟動(dòng)。
下面是幫助中的內(nèi)容:
(ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconsessionstate.htm)
ASP.NET 提供一個(gè)簡單、易于使用的會(huì)話狀態(tài)模型,您可以使用該模型跨多個(gè) Web 請求存儲(chǔ)任意數(shù)據(jù)和對象。它使用基于字典的、內(nèi)存中的對象引用(這些對象引用存在于 IIS 進(jìn)程中)緩存來完成該操作。使用進(jìn)程內(nèi)會(huì)話狀態(tài)模式時(shí)請考慮下面的限制:
使用進(jìn)程內(nèi)會(huì)話狀態(tài)模式時(shí),如果 aspnet_wp.exe 或應(yīng)用程序域重新啟動(dòng),則會(huì)話狀態(tài)數(shù)據(jù)將丟失。這些重新啟動(dòng)通常會(huì)在下面的情況中發(fā)生:
在應(yīng)用程序的 Web.config 文件的 < processModel> 元素中,設(shè)置一個(gè)導(dǎo)致新進(jìn)程在條件被滿足時(shí)啟動(dòng)的屬性,例如 memoryLimit。
修改 Global.asax 或 Web.config 文件。
更改到 Web 應(yīng)用程序的 Bin 目錄。
用殺毒軟件掃描并修改 Global.asax 文件、Web.config 文件或 Web 應(yīng)用程序的 Bin 目錄下的文件。
如果在應(yīng)用程序的 Web.config 文件的 < processModel> 元素中啟用了網(wǎng)絡(luò)園模式,請不要使用進(jìn)程內(nèi)會(huì)話狀態(tài)模式。否則將發(fā)生隨機(jī)數(shù)據(jù)丟失。
ASP.NET Session超時(shí)的解決方法還有這二種:
一:在***個(gè)頁面置了SESSION,然后REDIRECT去第二個(gè)頁面。解決方法是在REDIRECT中設(shè)置endResponse為FALSE。
二: ASP.NET中使用了ACCESS數(shù)據(jù)庫,而且數(shù)據(jù)庫是放在bin目錄中的。解決方法是不要放會(huì)更新的文件在BIN目錄中。
參考:http://www.dotnet247.com/247reference/msgs/58/290316.aspx
【編輯推薦】