SessionState詳解 session有效期時間:默認20分

衆所周知,當用戶登陸網站後較長一段時間沒有與服務器進行交互,將會致使服務器上的用戶會話數據(即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

 
說明

AutoDetect

ASP.NET 肯定請求瀏覽器或請求設備是否支持 Cookie。若是請求瀏覽器或請求設備支持 Cookie,則 AutoDetect 使用 Cookie 來保留用戶數據;不然,將在查詢字符串中使用一個標識符。若是瀏覽器或設備支持 Cookie,但當前禁用了 Cookie,則請求功能仍會使用 Cookie。

UseCookies

不管瀏覽器或設備是否支持 Cookie,都使用 Cookie 來保留用戶數據。

UseDeviceProfile

ASP.NET 根據 HttpBrowserCapabilities 設置來肯定是否使用 Cookie。若是 HttpBrowserCapabilities 設置指示瀏覽器或設備支持 Cookie,將使用 Cookie;不然,將在查詢字符串中使用一個標識符。

UseUri

不管瀏覽器或設備是否支持 Cookie,調用功能都使用查詢字符串來存儲標識符。

cookieName

可選的 String 屬性。

指定存儲會話標識符的 Cookie 的名稱。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲 "ASP.NET_SessionId"

customProvider

可選的 String 屬性。

指定用於存儲和檢索會話狀態數據的自定義會話狀態提供程序的名稱。該提供程序在 providers 元素中指定。僅當會話狀態模式設置爲Custom 值時,才使用該提供程序。有關更多信息,請參見會話狀態模式

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲空字符串 ("")。

mode

可選的 SessionStateMode 屬性。

指定存儲會話狀態值的位置。有關更多信息,請參見會話狀態模式

mode 屬性能夠爲下列可能值之一。默認值爲 InProc

 
說明

Custom

會話狀態將使用自定義數據存儲區來存儲會話狀態信息。

InProc

會話處於正在處理 ASP.NET 輔助進程的狀態。

Off

會話狀態被禁用。

SQLServer

會話狀態將使用進程外 SQL Server 數據庫來存儲狀態信息。

StateServer

會話狀態將使用進程外 ASP.NET 狀態服務來存儲狀態信息。

partitionResolverType

可選的 String 屬性。

指定在哪裏存儲會話狀態。若是 partitionResolverType 屬性中指定了值,則忽略 sqlConnectionStringstateConnectionString 屬性。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 值時是必需的。有關更多信息,請參見會話狀態模式

Note注意

若要在使用 SQLServer 模式時提升您的應用程序的安全性,請使用受保護的配置來加密配置的 sessionState 節,以幫助保護sqlConnectionString 值。

默認值爲 "data source=127.0.0.1;Integrated Security=SSPI"

stateConnectionString

可選的 String 屬性。

指定遠程存儲會話狀態的服務器名稱或地址以及端口。端口值必須爲 42424。當 modeStateServer 值時,該屬性是必需的。確保運行 ASP.NET 狀態服務的服務器是存儲會話狀態信息的遠程服務器。該服務隨 ASP.NET 一塊兒安裝,默認狀況下爲 %SystemRoot%\Microsoft.NET\Framework\VersionNumber\aspnet_state.exe。有關更多信息,請參見會話狀態模式

Note注意

若要在使用 StateServer 模式時提升您的應用程序的安全性,請使用受保護的配置來加密配置的 <sessionState> 節,以幫助保護stateConnectionString 值。

默認值爲 "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 將使用下列進程憑據之一來鏈接會話狀態存儲區:

  • 宿主進程;對於 Microsoft Internet 信息服務 [IIS] 5 和 5.1 版爲 ASPNET,對於 Microsoft Windows Server 2003 則爲 NETWORK SERVICE。

  • 應用程序模擬標識,當使用瞭如下配置時使用此憑據:

    <identity impersonate="true" userName="user" password="pwd" />

若是爲 false,ASP.NET 將使用目前與當前請求的操做系統線程關聯的憑據來鏈接會話狀態存儲區。對於客戶端模擬,ASP.NET 將使用與瀏覽器協商的安全憑據來鏈接會話狀態存儲區。若是爲 false,ASP.NET 在鏈接會話狀態存儲區時不會恢復爲進程標識或應用程序模擬標識。有關更多信息,請參見 ASP.NET 模擬

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲 true

Note注意

在 .NET Framework 1.1 版中,若是 mode 屬性設置爲 SQLServer,而且客戶端模擬有效,則 ASP.NET 使用來自 ASP.NET 客戶端模擬的客戶端憑據鏈接到運行 SQL Server 的計算機。

繼承的屬性

可選的屬性。

由全部節元素繼承的屬性。

子元素

 
元素 說明

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 模式
  1. 在將要存儲會話狀態信息的遠程服務器上,確保 ASP.NET 狀態服務正在運行。

    ASP.NET 狀態服務是隨 ASP.NET 一塊兒安裝的,默認狀況下爲 %SystemRoot%\Microsoft.NET\Framework\version\aspnet_state.exe。

  2. 在應用程序的 Web.config 文件中,將 mode 設置爲 "StateServer",並將 stateConnectionString 設置爲諸如 "tcpip=dataserver:42424" 這樣的值。

使用 SQLServer 模式
  1. 在運行將要存儲會話狀態的 SQL Server 的計算機上運行 InstallSqlState.sql。

    默認狀況下,InstallSqlState.sql 位於 %SystemRoot%\Microsoft.NET\Framework\version 中。

    這將建立一個具備新存儲過程的名爲 ASPState 的數據庫,並在 TempDB 數據庫中建立名爲 ASPStateTempApplications 和 ASPStateTempSessions 的表。

  2. 在應用程序的 Web.config 文件中,將 mode 設置爲 "SQLServer",並將 sqlConnectionString 設置爲諸如 "data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind" 這樣的值。

Note注意

可使用 aspnet_regsql 來完成這些步驟。

有關訪問和修改應用程序代碼中 sessionState 元素的配置值的信息,請參見 SessionStateSectionSystem.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>

下面的代碼示例演示如何指定多個會話狀態配置設置。

 
 
<sessionState
   mode="SQLServer"
   cookieless="true"
   sqlConnectionString=" Integrated Security=SSPI;data source=MySqlServer;"
   sqlCommandTimeout="10" />
  </system.web>
</configuration>
 

配置節處理程序

SessionStateSection

配置成員

System.Web.SessionState

可配置的位置

Machine.config

根級別的 Web.config

應用程序級別的 Web.config

要求

Microsoft Internet 信息服務版本 5.0、5.1 或 6.0

.NET Framework 版本 1.0、1.1 或 2.0

Microsoft Visual Studio 2003 或 Visual Studio 2005

 

 

http://msdn.microsoft.com/zh-cn/library/h6bb9cz9(VS.80).aspx

相關文章
相關標籤/搜索