SessionStateSection 类

配置 Web 应用程序的会话状态。

语法

class SessionStateSection : ConfigurationSectionWithCollection  

方法

下表列出了 SessionStateSection 类公开的方法。

名称 说明
添加 (继承自 ConfigurationSectionWithCollection。)
清除 (从 ConfigurationSectionWithCollection 继承。)
Get (从 ConfigurationSectionWithCollection 继承。)
GetAllowDefinition (继承自 ConfigurationSection。)
GetAllowLocation (从 ConfigurationSection 继承。)
删除 (从 ConfigurationSectionWithCollection 继承。)
RevertToParent (从 ConfigurationSection 继承。)
SetAllowDefinition (从 ConfigurationSection 继承。)
SetAllowLocation (从 ConfigurationSection 继承。)

属性

下表列出了 SessionStateSection 类公开的属性。

名称 描述
AllowCustomSqlDatabase 一个读/写 boolean 值。 如果允许用户在 SqlConnectionString 属性中指定初始目录值,则为 true;否则为 false。 默认为 false
Cookieless 一个读/写 sint32 值,用于配置如何使用 Cookie 来标识客户端会话。 后文的“备注”部分列出了可能的值。 注意:会话状态可以通过两种方式来存储用于将客户端与服务器会话关联的唯一 ID:在客户端上存储 HTTP Cookie,或者在 URL 中对会话 ID 进行编码。 将会话 ID 存储在 Cookie 中更安全,但需要客户端浏览器支持 Cookie。 对于允许不支持 Cookie 的客户端的应用程序(例如各种移动设备),可以将会话 ID 存储在 URL 中。 URL 选项有几个缺点。 它要求站点上的链接是相对的,并且在会话开始时使用新的查询字符串值来重定向页面。 它还会在查询字符串中公开会话 ID,导致该 ID 被安全攻击利用。 仅当需要支持缺少 Cookie 支持的客户端时,才应使用无 Cookie 模式。
CookieName 一个读/写 string 值,指定用于会话标识的 HTTP Cookie 的名称。 默认值为“ASP.NET_SessionId”。
CustomProvider 一个读/写 string 值,指定 Providers 属性中的自定义提供程序名称,当 Mode 属性设置为 Custom 时使用该属性。
Location (继承自 ConfigurationSection。)一个键属性。
Mode 一个读/写 sint32 值,指定存储会话状态的位置。 后文的“备注”部分列出了可能的值。 注意Mode 属性不是必需的,可以从配置层次结构中的更高级别继承,或者从默认值继承。 但是,配置处理程序始终根据该部分的当前继承值写出模式。
PartitionResolverType 一个读/写 string 值,包含解析器类型的完全限定名称,当 Mode 属性设置为 SQLServerStateServer 时,该解析器类型在多个后端节点之间将会话状态数据分区。 注意:如果指定此属性,则将忽略 SqlConnectionStringStateConnectionString 属性。 PartitionResolverType 返回的连接字符串用于每个请求,以连接到该请求其余部分的相应服务器位置。 如果连接字符串无效,ASP.NET 将引发异常,该异常与配置的服务器连接字符串无效时引发的异常相同。
Path (继承自 ConfigurationSection。)一个键属性。
Providers 一个 ProviderSettings 值,包含执行会话状态相关服务的提供程序的名称和类型。
RegenerateExpiredSessionId 一个读/写 boolean 值。 如果当客户端指定过期的会话 ID 时重新生成会话 ID,则为 true;否则为 false。 默认为 false注意:默认情况下,在启用此属性后,仅重新发出无 Cookie URL。
SectionInformation (从 ConfigurationSection 继承。)
SessionIDManagerType 一个读/写 string 值,指定会话 ID 管理器的完全限定类型。
SqlCommandTimeout 一个读/写 datetime 值,指定使用 SQL Server 会话状态模式的 SQL 命令的超时。 默认值为 30 秒。
SqlConnectionString 包含 SQL Server 连接字符串的读/写 string 值。 默认值为“data source=localhost;Integrated Security=SSPI”。 当 Mode 属性设置为 SQLServer 时,此属性是必需的。
StateConnectionString 一个读/写 string 值,指定远程存储会话状态时的服务器名称和端口。 默认值为“tcpip=loopback:42424”。 当 Mode 属性设置为 StateServer 时,此属性是必需的。 注意:确保 ASP.NET 状态服务正在存储会话状态信息的远程服务器上运行。 此服务随 ASP.NET 一起安装,默认位置为 [drive:]\WINDOWS\Microsoft.NET\Framework\VersionNumber\aspnet_state.exe。 默认情况下,此服务配置为手动启动。 必须将启动行为更改为“自动”。
StateNetworkTimeout 一个读/写 datetime 值,指定在放弃会话之前,Web 服务器和状态服务器之间的网络连接可以保持空闲的时间(以秒为单位)。 当 Mode 属性设置为 StateServer 时,此属性是必需的。 默认值为 10 秒。
Timeout 一个读/写 datetime 值,指定以分钟为单位的时间,在此时间过后,会话将因不活动而过期。 默认为 20 分钟。 注意:不能将 Timeout 属性设置为大于 525,601 分钟(1 年)的值。
UseHostingIdentity 一个读/写 boolean 值。 如果为远程连接启用 Windows 身份验证和主机进程标识(ASP.NET 或 Windows 服务标识),则为 true;如果会话状态使用客户端模拟(如果可用),则为 false。 默认为 true注意:此设置仅向 ASP.NET 工作进程或应用程序标识(而不是整个域或一组域用户)授予数据库访问权限,从而简化了集成 Windows 身份验证的管理。

子类

此类不包含子类。

注解

当新客户端开始与 Web 应用程序交互时,会发出一个会话 ID,并将该会话 ID 与会话有效期间来自同一客户端的所有后续请求相关联。 此 ID 用于维护与跨请求的客户端会话关联的服务器端状态。 SessionStateSection 类控制 ASP.NET 应用程序如何代表每个客户端建立和维护此关联。

下表列出了 Cookieless 属性的可能值。 默认值为 1 (UseCookies)。

关键字 说明
0 UseUri 会话 ID 作为查询字符串嵌入到统一资源标识符 (URI) 请求中,并且 URI 将重定向到最初请求的 URL。 在整个会话持续期间会使用更改后的 URI 请求,因此不需要任何 Cookie。 注意:当使用 UseUri 模式时,应将 RegenerateExpiredSessionId 属性设置为 true。 这样会使 Web 服务器废弃原有的令牌而重新生成令牌,从而使得留给可能的攻击者捕获 Cookie 并访问 Web 服务器内容的时间减少。 还应考虑将 Timeout 属性更改为小于 20 分钟的默认值。
1 UseCookies 在用户连接到网站期间,会话 ID 存储在客户端上的 HTTP Cookie 中。 Cookie 在客户端和 Web 服务器之间的所有请求的 HTTP 标头中传递,并且在跟踪会话状态方面更有效,因为它们不需要重定向。 此外,如果用户离开一个站点去访问另一个站点,然后返回到原始站点,它们也会保留状态。 注意:考虑将 Timeout 属性更改为小于 20 分钟的默认值,以便潜在攻击者有更少的时间捕获 Cookie 并获取对网站内容的访问权限。
2 AutoDetect 仅在浏览器握手验证可以存储 Cookie 后,会话 ID 才会存储在客户端上的 HTTP Cookie 中。 注意:当使用 AutoDetect 模式时,应将 RegenerateExpiredSessionId 属性设置为 true。 这样会使 Web 服务器废弃原有的令牌而重新生成令牌,从而使得留给可能的攻击者捕获 Cookie 并访问 Web 服务器内容的时间减少。 还应考虑将 Timeout 属性更改为小于 20 分钟的默认值。
3 UseDeviceProfile 如果客户端设备配置文件支持 Cookie,则会话 ID 存储在客户端上的 HTTP Cookie 中;否则不会使用 Cookie。 如果设备配置文件支持 Cookie,即使用户禁用了 Cookie 支持,也会使用 Cookie。 使用此设置可确保无 Cookie ID 仅用于需要它们的客户端(例如移动浏览器)。 注意:当使用 UseDeviceProfile 模式时,应将 RegenerateExpiredSessionId 属性设置为 true。 这样会使 Web 服务器废弃原有的令牌而重新生成令牌,从而使得留给可能的攻击者捕获 Cookie 并访问 Web 服务器内容的时间减少。 还应考虑将 Timeout 属性更改为小于 20 分钟的默认值。

下表列出了 Mode 属性的可能值。 默认值为 1 (InProc)。

关键字 说明
0 Off 会话状态已禁用。
1 InProc ASP.NET 应用程序的会话状态存储在运行应用程序的工作进程中。

进程内会话状态是最快的内置状态存储模式。 但是,随着在会话中存储的数据越来越多,将会占用更多的 Web 服务器内存,进而降低性能。

如果回收工作进程,进程内会话状态数据将会丢失。 如果 ASP.NET 应用程序需要保留会话状态数据,并且数据访问速度不是主要考虑因素,请考虑使用进程外会话状态模式来存储数据。

如果没有会话 ID 关联方案来保证具有给定会话 ID 的所有请求都将定向到同一 Web 服务器,则进程内会话状态无法在 Web 场中使用。 注意:ASP.NET 状态服务 (Aspnet_state.exe) 必须正在运行,进程内会话状态才能发挥作用。 此服务随 ASP.NET 一起安装,默认位置为 [drive:]\WINDOWS\Microsoft.NET\Framework\VersionNumber\aspnet_state.exe。 默认情况下,此服务配置为手动启动。 必须将启动行为更改为“自动”。
2 StateServer 会话状态使用进程外 ASP.NET 状态服务来存储状态信息。 此配置的优点是在应用程序的工作进程回收时保留会话状态。 如果使用此设置,则必须在 StateConnectionString 属性中指定连接字符串。
3 SQLServer 会话状态使用进程外 SQL Server 数据库来存储状态信息。 此配置的优点是,当回收应用程序的工作进程时,或者当 ASP.NET 状态服务或 Web 服务器出现故障时,会话状态将得以保留。 如果使用此设置,则必须在 SqlConnectionString 属性中指定连接字符串。 注意:若要使用 SQLServer 会话状态模式,必须在运行存储会话状态的 SQL Server 的计算机上运行 InstallSqlState.sql SQL 脚本(在安装默认 .NET Framework 的过程中安装在 [drive:]\WINDOWS\Microsoft.NET \Framework\VersionNumber 中)。 这会创建一个名为 ASPState 的数据库(包含新的存储过程),并在 TempDB 数据库中创建新的 ASPStateTempApplications 和 ASPStateTempSessions 表。
4 Custom 会话状态使用自定义数据存储来存储会话状态信息。 如果使用此设置,则必须在 CustomProvider 属性中指定自定义提供程序的名称。

继承层次结构

ConfigurationSection

ConfigurationSectionWithCollection

SessionStateSection

要求

类型 描述
客户端 - IIS 7.0(在 Windows Vista 上)
- IIS 7.5(在 Windows 7 上)
- IIS 8.0(在 Windows 8 上)
- IIS 10.0(在 Windows 10 上)
服务器 - IIS 7.0(在 Windows Server 2008 上)
- IIS 7.5(在 Windows Server 2008 R2 上)
- IIS 8.0(在 Windows Server 2012 上)
- IIS 8.5(在 Windows Server 2012 R2 上)
- IIS 10.0(在 Windows Server 2016 上)
产品 - IIS 7.0、IIS 7.5、IIS 8.0、IIS 8.5、IIS 10.0
MOF 文件 WebAdministration.mof

另请参阅

System.Web.Configuration.SystemWebSectionGroup.SessionState
System.Web.SessionState.SessionStateModeConfigurationSectionWithCollection 类
ProviderSettings 类
Web 应用程序的快速、可缩放且安全的会话状态管理