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


眾所周知,當用戶登錄網站后較長一段時間沒有與服務器進行交互,將會導致服務器上的用戶會話數據(即session)被銷毀。此時,當用戶再次操作網頁時,如果服務器進行了session校驗,那么瀏覽器將會提醒用戶session超時,導致這個問題的關鍵詞有兩個:一個是「長時間」,一個是「未操作」。 

防止session超時,我們一般采用的方式有兩種:1、延遲session超時時間 2、(在規定的session超時時間內)隔一定時間與服務器交互。

這里提一下,定時刷新頁面。可以解決丟失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>

下面幾部分描述了屬性、子元素和父元素。

屬性

 
屬性 說明

allowCustomSqlDatabase

可選的 Boolean 屬性。

指定會話狀態 SQL 數據庫是否可以是自定義數據庫(而不是 ASP.NET 默認數據庫)。如果為 false,則不能指定初始目錄或數據庫作為sqlConnectionString 屬性的值。默認會話狀態 SQL 數據庫為 ASPState 數據庫。有關更多信息,請參見會話狀態模式

此屬性是 .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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM