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]"
    sessionIDManagerType="session manager type"
    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"
    compressionEnabled="[True|False]"
    sqlConnectionRetryInterval="number of seconds">
    <providers>...</providers>
</sessionState>

屬性和項目

下列各節將說明屬性、子項目和父項目。

屬性

屬性

描述

allowCustomSqlDatabase

選擇性 Boolean 屬性。

指定工作階段狀態 SQL 資料庫是否可以替代 ASP.NET 預設資料庫成為自訂資料庫。 如果為 false,則您不能指定初始化分類或資料庫做為 sqlConnectionString 屬性的值。 預設工作階段狀態 SQL 資料庫是 ASPState 資料庫。 如需詳細資訊,請參閱工作階段狀態模式

這個屬性是 .NET Framework 2.0 版中新增的屬性。

預設值為 false。

compressionEnabled

選擇性 Boolean 屬性。

指定是否將壓縮套用至工作階段狀態資料。

預設值為 false。

cookieless

選擇性 HttpCookieMode 屬性。

指定 Cookie 如何用於 Web 應用程式。

cookieless 屬性可以是下列其中一個可能值。 預設為 UseCookies 值。

注意事項注意事項
當您設定已啟用 AJAX 的 ASP.NET 網站時,對於 cookieless 屬性,您應該僅使用預設值 UseCookies。ASP.NET AJAX 用戶端指令碼程式庫不支援使用內嵌在 URL 中之 Cookie 的設定。
值描述
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 工作階段狀態使用跨處理序 (Out-Of-Process) SQL Server 資料庫,儲存狀態資訊。
StateServer 工作階段狀態使用跨處理序 ASP.NET 狀態服務儲存狀態資訊。

partitionResolverType

選擇性 String 屬性。

指定儲存工作階段狀態的位置。 如果在 partitionResolverType 屬性中指定值,則會忽略 sqlConnectionString 和 stateConnectionString 屬性。 PartitionResolverType 屬性傳回的連接字串會用於每個要求,以連接到其餘要求的適當伺服器位置。 如果連接字串無效,則 ASP.NET 擲出的例外狀況與設定伺服器的連接字串無效時所擲出的相同。 這個屬性用於在 SQL 或狀態伺服器模式中,跨多個後端節點分割工作階段狀態資料。

這個屬性是 .NET Framework 2.0 版中新增的屬性。

預設為空字串。

regenerateExpiredSessionId

選擇性 Boolean 屬性。

指定用戶端指定過期的工作階段 ID 時是否重新發出工作階段 ID。 依照預設,當 regenerateExpiredSessionId 啟用時,工作階段 ID 只會為 cookieless 模式重新發出。 如需詳細資訊,請參閱IsCookieless

這個屬性是 .NET Framework 2.0 版中新增的屬性。

預設值為 true。

sessionIDManagerType

選擇性 String 屬性。

指定工作階段 ID 管理員的完整型別。 預設值為空字串。

sqlCommandTimeout

選擇性 TimeSpan 屬性。

指定使用 SQL Server 工作階段狀態模式之 SQL 命令的期間逾時 (以秒為單位)。 期間逾時是 SQL 命令在取消之前可閒置的秒數。

這個屬性是 .NET Framework 2.0 版中新增的屬性。

預設為 0:00:30 (30 秒)。

sqlConnectionRetryInterval

選擇性 TimeSpan 屬性。

指定在連接資料庫的嘗試之間,以秒為單位的時間間隔。

預設為 0 秒。

sqlConnectionString

選擇性 String 屬性。

指定執行 SQL Server 之電腦的連接字串。 mode 屬性設為 SQLServer 值時,這個屬性是必要的。 如需詳細資訊,請參閱工作階段狀態模式

您可以在 connectionStrings 節點內名為 sqlConnectionString 的項目上設定這個屬性,或使用下列語法:

sqlConnectionString="Data Source=.\SQLServer2005;Initial Catalog=SessionState;Integrated Security=SSPI;"
注意事項注意事項
若要在使用 SQLServer 模式時改進應用程式的安全性,請使用受保護的組態,利用加密組態的 sessionState 區段以保護 sqlConnectionString 值。

預設值為 "data source=127.0.0.1;Integrated Security=SSPI"。

stateConnectionString

選擇性 String 屬性。

指定在遠端儲存工作階段狀態的伺服器名稱或位址和連接埠。 連接埠值必須為 42424。 mode 為 StateServer 值時,這個屬性是必要的。 確定已在儲存工作階段狀態資訊的遠端伺服器上執行 ASP.NET 狀態服務。 這項服務會與 ASP.NET 一起安裝,且其預設位置為 %windir%\Microsoft.NET\Framework\VersionNumber\aspnet_state.exe。 如需詳細資訊,請參閱工作階段狀態模式

注意事項注意事項
若要在使用 StateServer 模式時改善應用程式的安全性,請使用受保護的組態,透過加密組態的 sessionState 區段加密以保護 stateConnectionString 值。

預設值為 "tcpip=127.0.0.1:42424"。

stateNetworkTimeout

選擇性 TimeSpan 屬性。

指定在取消要求之前,Web 伺服器與狀態伺服器之間的 TCP/IP 網路連接可以閒置的秒數。 mode 屬性設為 StateServer 值時會使用這個屬性。

預設值為 10 秒。

timeout

選擇性 TimeSpan 屬性。

指定在棄置工作階段之前工作階段可閒置 (Idle) 的分鐘數。 對於同處理序 (In-Process) 和狀態伺服器模式,timeout 屬性不能設定為大於 525,600 分鐘 (1 年) 的值。

工作階段 timeout 組態設定只適用於 ASP.NET Web 網頁。 變更工作階段 timeout 值不會影響 ASP 網頁的工作階段逾時。 同樣地,變更 ASP 網頁的工作階段逾時也不會影響 ASP.NET Web 網頁的工作階段逾時。

預設為 20 分鐘。

useHostingIdentity

選擇性 Boolean 屬性。

指定工作階段狀態是否還原成主控識別或使用用戶端模擬。

如果為 true,則 ASP.NET 會使用下列其中一個處理序認證連接至工作階段狀態存放區:

  • 裝載處理序,若是 Microsoft Internet Information Services (IIS) 5 和 5.1 版,便為 ASPNET,或者若是 Microsoft Windows Server 2003,則為 NETWORK SERVICE。

  • 應用程式模擬識別,使用下列組態時會使用此識別:

    <identity impersonate="true" userName="domain\username" password="secure password" />

如果為 false,則 ASP.NET 會針對目前的要求,使用目前與作業系統執行緒關聯的認證連接至工作階段狀態存放區。 對於用戶端模擬,ASP.NET 會使用與瀏覽器交涉的安全性認證連接至工作階段狀態存放區。 如果為 false,則 ASP.NET 在連接至工作階段狀態存放區時,不會還原處理序識別或應用程式模擬識別。 如需詳細資訊,請參閱ASP.NET 模擬

這個屬性是 .NET Framework 2.0 版中新增的屬性。

預設值為 true。

注意事項注意事項
在 .NET Framework 1.1 版中,如果 mode 屬性設定為 SQLServer,且用戶端模擬已生效,則 ASP.NET 會使用來自 ASP.NET 用戶端模擬的用戶端認證,連接至執行 SQL Server 的電腦。

繼承的屬性

選擇性屬性。

所有區段項目繼承的屬性。

子項目

項目

描述

providers

包含自訂工作階段狀態存放區提供者的集合。

父項目

項目

描述

configuration

Common Language Runtime 和 .NET Framework 架構的應用程式所使用之每一個組態檔中的必要根項目 (Root Element)。

system.web

指定組態檔中 ASP.NET 組態設定的根項目,並包含會設定 ASP.NET Web 應用程式以及控制這些應用程式之行為的項目。

備註

<sessionState> 項目會設定目前應用程式的工作階段狀態設定。

新的用戶端與 Web 應用程式開始互動時,會發出工作階段 ID,並使其與工作階段有效期間內同一用戶端的所有後續要求產生關聯。 這個 ID 用於維護與用戶端工作階段跨要求相關聯的伺服器端狀態。 <sessionState> 項目會控制 ASP.NET 應用程式如何為每個用戶端建立和維護這個關聯。

此外,這個機制非常有彈性,可讓您跨處理序主控工作階段狀態資訊,並追蹤狀態而不使用 Cookie。

當您以 URI 傳送工作階段 ID 時,可以超過 URI 的最大大小。 如果匿名識別票證、表單驗證票證、工作階段 ID 和使用者資料的組合大於允許的 UI 最大長度,則要求會失敗,錯誤為 400-不正確的要求。

使用 StateServer 模式

  1. 在儲存工作階段狀態資訊的遠端伺服器上,請確定 ASP.NET 狀態服務正在執行。

    ASP.NET 狀態服務是用 ASP.NET 安裝的,預設位於 %windir%\Microsoft.NET\Framework\version\aspnet_state.exe。

  2. 在每個應用程式的 Web.config 檔中,將 mode 設定為 "StateServer",stateConnectionString 設定為某個值 (例如 "tcpip=dataserver:42424")。

使用 SQLServer 模式

  1. 在儲存工作階段且執行 SQL Server 的電腦上,執行 InstallSqlState.sql。

    根據預設,InstallSqlState.sql 位於 %windir%\Microsoft.NET\Framework\version。

    這項作業會建立名稱為 ASPState 的資料庫,其中具有新的預存程序 (Stored Procedure),並在 TempDB 資料庫中建立名稱為 ASPStateTempApplications 和 ASPStateTempSessions 的資料表。

  2. 在每個應用程式的 Web.config 檔中,將 mode 設定為 "SQLServer",sqlConnectionString 設定為某個值 (例如 "data source=localhost;Integrated Security=SSPI;")。

    注意事項注意事項

    您可以使用 Aspnet_regsql.exe 完成這些步驟。

如需存取和修改應用程式程式碼中 <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" />

項目資訊

組態區段處理常式

SessionStateSection

組態成員

System.Web.SessionState

可設定的位置

Machine.config

根層次的 Web.config

應用程式層級的 Web.config

需求

Microsoft Internet Information Services 5.0、5.1 或 6.0 版

.NET Framework 1.0、1.1 或 2.0 版

Microsoft Visual Studio 2003 或 Visual Studio 2005

請參閱

工作

HOW TO:使用位置設定來設定特定的目錄

HOW TO:鎖定 ASP.NET 組態設定

參考

system.web 項目 (ASP.NET 設定結構描述)

sessionState 的 providers 項目 (ASP.NET 設定結構描述)

configuration 項目 (一般設定結構描述)

System.Configuration

System.Web.Configuration

SessionStateSection

System.Web.SessionState

概念

ASP.NET 模擬

工作階段狀態模式

設定工作階段狀態的安全性

ASP.NET 組態檔階層架構和繼承

保護 ASP.NET 組態

ASP.NET 組態案例

其他資源

使用受保護的組態加密組態資訊

一般組態設定 (ASP.NET)

ASP.NET 組態設定

ASP.NET 網站管理

ASP.NET 組態 API