衆所周知,當用戶登陸網站後較長一段時間沒有與服務器進行交互,將會致使服務器上的用戶會話數據(即session)被銷燬。此時,當用戶再次操做網頁時,若是服務器進行了session校驗,那麼瀏覽器將會提醒用戶session超時,致使這個問題的關鍵詞有兩個:一個是「長時間」,一個是「未操做」。 web
防止session超時,咱們通常採用的方式有兩種:一、延遲session超時時間 二、(在規定的session超時時間內)隔必定時間與服務器交互。sql
這裏提一下,定時刷新頁面。能夠解決丟失session的問題。數據庫
測試的時候在session有效期內一直刷新,也是一直刷新起始時間。這時候session時間又重新開始計算。!後端
爲當前應用程序配置會話狀態設置。瀏覽器
configuration 元素(常規設置架構)
system.web 元素(ASP.NET 設置架構)
sessionState 元素(ASP.NET 設置架構)安全
<sessionState mode="[Off|InProc|StateServer|SQLServer|Custom]" timeout="number of minutes" cookieName="session identifier cookie name" cookieless= "[true|false|AutoDetect|UseCookies|UseUri|UseDeviceProfile]" regenerateExpiredSessionId="[True|False]" sqlConnectionString="sql connection string" sqlCommandTimeout="number of seconds" allowCustomSqlDatabase="[True|False]" useHostingIdentity="[True|False]" stateConnectionString="tcpip=server:port" stateNetworkTimeout="number of seconds" customProvider="custom provider name"> <providers>...</providers> </sessionState>
下面幾部分描述了屬性、子元素和父元素。服務器
屬性 | 說明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
allowCustomSqlDatabasecookie |
可選的 Boolean 屬性。網絡 指定會話狀態 SQL 數據庫是否能夠是自定義數據庫(而不是 ASP.NET 默認數據庫)。若是爲 false,則不能指定初始目錄或數據庫做爲sqlConnectionString 屬性的值。默認會話狀態 SQL 數據庫爲 ASPState 數據庫。有關更多信息,請參見會話狀態模式。session 此屬性是 .NET Framework 2.0 版中的新屬性。 默認值爲 false。 |
||||||||||||
cookieless |
可選的 HttpCookieMode 屬性。 指定對於 Web 應用程序使用 Cookie 的方式。 cookieless 屬性能夠爲下列可能值之一。默認值爲 UseCookies。
|
||||||||||||
cookieName |
可選的 String 屬性。 指定存儲會話標識符的 Cookie 的名稱。 此屬性是 .NET Framework 2.0 版中的新屬性。 默認值爲 "ASP.NET_SessionId"。 |
||||||||||||
customProvider |
可選的 String 屬性。 指定用於存儲和檢索會話狀態數據的自定義會話狀態提供程序的名稱。該提供程序在 providers 元素中指定。僅當會話狀態模式設置爲Custom 值時,才使用該提供程序。有關更多信息,請參見會話狀態模式。 此屬性是 .NET Framework 2.0 版中的新屬性。 默認值爲空字符串 ("")。 |
||||||||||||
mode |
可選的 SessionStateMode 屬性。 指定存儲會話狀態值的位置。有關更多信息,請參見會話狀態模式。 mode 屬性能夠爲下列可能值之一。默認值爲 InProc。
|
||||||||||||
partitionResolverType |
可選的 String 屬性。 指定在哪裏存儲會話狀態。若是 partitionResolverType 屬性中指定了值,則忽略 sqlConnectionString 和 stateConnectionString 屬性。PartitionResolverType 屬性返回的鏈接字符串將用於每一個請求,爲請求的其他部分鏈接到適當的服務器位置。若是鏈接字符串無效,ASP.NET 將引起一個異常,該異常與當配置的服務器鏈接字符串無效時引起的異常相同。該屬性用於在 SQL 或狀態服務器模式下在多個後端節點上劃分會話狀態數據。 此屬性是 .NET Framework 2.0 版中的新屬性。 默認值爲空字符串。 |
||||||||||||
regenerateExpiredSessionId |
可選的 Boolean 屬性。 指定當客戶端指定了過時的會話 ID 時是否從新發出會話 ID。默認狀況下,當啓用了 regenerateExpiredSessionId 時,僅爲 cookieless 模式從新發出會話 ID。有關更多信息,請參見 IsCookieless。 此屬性是 .NET Framework 2.0 版中的新屬性。 默認值爲 true。 |
||||||||||||
sqlCommandTimeout |
可選的 TimeSpan 屬性。 指定使用 SQL Server 會話狀態模式的 SQL 命令的持續時間超時(秒)。持續時間超時是 SQL 命令能夠處於空閒狀態的時間(秒),超過此時間以後,該命令將被取消。 此屬性是 .NET Framework 2.0 版中的新屬性。 默認值爲 0:00:30(30 秒)。 |
||||||||||||
sqlConnectionString |
可選的 String 屬性。 爲運行 SQL Server 的計算機指定鏈接字符串。該屬性在 mode 屬性設置爲 SQLServer 值時是必需的。有關更多信息,請參見會話狀態模式。
默認值爲 "data source=127.0.0.1;Integrated Security=SSPI"。 |
||||||||||||
stateConnectionString |
可選的 String 屬性。 指定遠程存儲會話狀態的服務器名稱或地址以及端口。端口值必須爲 42424。當 mode 爲 StateServer 值時,該屬性是必需的。確保運行 ASP.NET 狀態服務的服務器是存儲會話狀態信息的遠程服務器。該服務隨 ASP.NET 一塊兒安裝,默認狀況下爲 %SystemRoot%\Microsoft.NET\Framework\VersionNumber\aspnet_state.exe。有關更多信息,請參見會話狀態模式。
默認值爲 "tcpip=127.0.0.1:42424"。 |
||||||||||||
stateNetworkTimeout |
可選的 TimeSpan 屬性。 指定 Web 服務器與狀態服務器之間的 TCP/IP 網絡鏈接能夠處於空閒狀態的時間(秒),超過此時間後,請求將被取消。該屬性在 mode 屬性設置爲 StateServer 值時使用。 默認值爲 10 秒。 |
||||||||||||
timeout |
可選的 TimeSpan 屬性。 指定在放棄一個會話前該會話能夠處於空閒狀態的分鐘數。對於進程內和狀態服務器模式,timeout 屬性不能設置爲大於 525,601 分鐘(1 年)的值。 會話 timeout 配置設置僅適用於 ASP.NET 頁。更改會話 timeout 值不會影響 ASP 頁的會話超時時間。一樣,更改 ASP 頁的會話超時時間不會影響 ASP.NET 頁的會話超時時間。 默認值爲 20 分鐘。 |
||||||||||||
useHostingIdentity |
可選的 Boolean 屬性。 指定會話狀態將恢復爲宿主標識仍是使用客戶端模擬。 若是爲 true,ASP.NET 將使用下列進程憑據之一來鏈接會話狀態存儲區:
若是爲 false,ASP.NET 將使用目前與當前請求的操做系統線程關聯的憑據來鏈接會話狀態存儲區。對於客戶端模擬,ASP.NET 將使用與瀏覽器協商的安全憑據來鏈接會話狀態存儲區。若是爲 false,ASP.NET 在鏈接會話狀態存儲區時不會恢復爲進程標識或應用程序模擬標識。有關更多信息,請參見 ASP.NET 模擬。 此屬性是 .NET Framework 2.0 版中的新屬性。 默認值爲 true。
|
||||||||||||
繼承的屬性 |
可選的屬性。 由全部節元素繼承的屬性。 |
元素 | 說明 |
---|---|
providers |
包含自定義會話狀態存儲區提供程序的集合。 |
元素 | 說明 |
---|---|
configuration |
公共語言運行庫和基於 .NET Framework 的應用程序所使用的每一個配置文件中均須要的根元素。 |
system.web |
指定配置文件中 ASP.NET 配置設置的根元素,幷包含用於配置 ASP.NET Web 應用程序和控制應用程序行爲方式的配置元素。 |
sessionState 元素配置當前應用程序的會話狀態設置。
新客戶端在開始與 Web 應用程序交互時,會發出一個會話 ID,而且該 ID 將與會話有效期間從同一客戶端發出的全部後續請求關聯。此 ID 用於在不一樣的請求中保持與客戶端會話關聯的服務器端狀態。sessionState 元素控制 ASP.NET 應用程序如何爲每一個客戶端創建並保持這種關聯。
這種機制很是靈活,能夠爲您提供許多功能,其中包括承載進程外的會話狀態信息,以及在不使用 Cookie 的狀況下跟蹤狀態。
在 URI 中發送會話 ID 時,能夠超過 URI 的最大大小。若是匿名標識票證、Forms 身份驗證票證、會話 ID 和用戶數據的組合超過了容許的最大 URI 長度,請求將失敗,併發出「400 錯誤的請求」錯誤。
使用 StateServer 模式在將要存儲會話狀態信息的遠程服務器上,確保 ASP.NET 狀態服務正在運行。
ASP.NET 狀態服務是隨 ASP.NET 一塊兒安裝的,默認狀況下爲 %SystemRoot%\Microsoft.NET\Framework\version\aspnet_state.exe。
在應用程序的 Web.config 文件中,將 mode 設置爲 "StateServer",並將 stateConnectionString 設置爲諸如 "tcpip=dataserver:42424" 這樣的值。
在運行將要存儲會話狀態的 SQL Server 的計算機上運行 InstallSqlState.sql。
默認狀況下,InstallSqlState.sql 位於 %SystemRoot%\Microsoft.NET\Framework\version 中。
這將建立一個具備新存儲過程的名爲 ASPState 的數據庫,並在 TempDB 數據庫中建立名爲 ASPStateTempApplications 和 ASPStateTempSessions 的表。
在應用程序的 Web.config 文件中,將 mode 設置爲 "SQLServer",並將 sqlConnectionString 設置爲諸如 "data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind" 這樣的值。
注意 |
---|
可使用 aspnet_regsql 來完成這些步驟。 |
有關訪問和修改應用程序代碼中 sessionState 元素的配置值的信息,請參見 SessionStateSection 和 System.Web.SessionState。
下面的默認 sessionState 元素不是在 Machine.config 文件或根 Web.config 文件中顯式配置的,而是由應用程序返回的默認配置。
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" stateNetworkTimeout="10" sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI" sqlCommandTimeout="30" customProvider="" cookieless="UseCookies" cookieName="ASP.NET_SessionId" timeout="20" allowCustomSqlDatabase="false" regenerateExpiredSessionId="true" partitionResolverType="" useHostingIdentity="true"> <providers> <clear /> </providers> </sessionState>
http://msdn.microsoft.com/zh-cn/library/h6bb9cz9(VS.80).aspx