asp.net避免Sessiont丟失無效的方法
來源:互聯網
上載者:User
asp.net|session 最簡單的辦法就是不要使用預設的方式也即
InProc(預設,進程內的工作階段狀態):Session儲存在IIS進程中(Web伺服器記憶體)。如果使用的是Windows 2000 Server或Windows XP,IIS使用aspnet_wp.exe進程,如果使用的是Windows 2003 Server,IIS使用w3wp.exe。
InProc擁有最好的效能。但進程內Session很容易丟失Session資訊。如果重啟了應用程式,所有的Session資訊就會丟失。而很多原因都會導致ASP.NET應用程式的重啟。
修改了Web.Config或Global.asax檔案,或改變了檔案的修改日期。
修改了\bin或\App_Code目錄裡的檔案。
防毒軟體修改了上述檔案等等
你可以考慮以下兩種方式
StateServer(進程外的工作階段狀態):Session儲存在獨立的Windows服務進程aspnet_state.exe中
如果要啟用StateServer中的Session狀態,首先要在”控制台”--“管理工具”--“服務”中,啟用ASP.NET State Services(ASP.NET 狀態服務),並將此服務設定為Automatic(自動啟動)
啟動ASP.NET狀態服務後,需要配置ASP.NET應用程式來使用它。
我們需要在Web.Config檔案中system.web節點中添加如下代碼
<sessionState mode="StateServer" stateNetworkTimeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
首先,mode屬性被設為StateServer。接著,stateConnectionString屬性用來指定ASP.NET狀態伺服器端的位置。連 接位置被建立為在127.0.0.1,連接埠42424。最後,stateNetworkTimeout屬性用來指定連線逾時的秒數。
需要注意的是,此時必須把對象標註為可序列化後(使用Serializable特性標記需要序列化的類)才能在服務中進行儲存。Microsoft建議所 有的開發人員在開發過程中都使用進程外的工作階段狀態,以避免項目如果切換到其他進程外的提供者或SqlServer而導致網站的錯誤。
或者使用
SqlServer:Session儲存在SqlServer資料庫的表中,可以用aspnet_regsql.exe配置它(SqlServer伺服器)