.NET Framework 4
其他版本
评价此主题

 

下面的列表描述了可用的会话状态模式:

  • 这是默认值。

  • 这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。

  • 这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。

  • Custom 模式,此模式允许您指定自定义存储提供程序。

  • Off 模式,此模式禁用会话状态。

HttpSessionState.Mode 属性的值,可以查看当前选定的会话状态。

会话状态事件

警告

如果使用此模式,则在同一会话的不同请求由不同的辅助进程进行处理时,可能会发生数据丢失。

使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器。

ASP.NET 状态服务安装在以下位置:

版本号\aspnet_state.exe

StateServer 模式,请在该应用程序的 Web.config 文件中执行以下操作:

  • StateServer

  • :42424

    注意

    使用受保护的配置加密配置信息

SampleStateServer 的远程计算机上:

 
 
<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>
注意

SerializableAttribute 类。

有 关如何创建计算机密钥的信息,请参见位于 http://support.microsoft.com 上的 Microsoft 知识库中的文章 313091“How to create keys by using Visual Basic .NET for use in Forms authentication”(如何使用 Visual Basic .NET 创建用于 Forms 身份验证的密钥)。

使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器。

注意

SerializableAttribute 类。

可以使用 Aspnet_regsql.exe 工具安装 ASP.NET 会话状态数据库,本主题稍后将对此进行说明。

SQLServer 模式,请在该应用程序的 Web.config 文件中执行以下操作:

  • SQLServer

  • sqlConnectionString 特性设置为 SQL Server 数据库的连接字符串。

    注意

    使用受保护的配置加密配置信息

SQLServer 模式的一种配置设置,其中会话状态存储在一个名为“SampleSqlServer”的 SQL Server 上:

 
 
<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>
注意

ASP.NET 模拟

有 关解决服务器之间应用程序路径不同的问题的步骤信息,请参见位于 http://support.microsoft.com 上的 Microsoft 知识库中的文章 325056“PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode”(PRB:如果使用 SqlServer 或 StateServer 会话模式则会在网络场中丢失会话状态)。

使用 Aspnet_regsql.exe 工具安装会话状态数据库

使用命令提供以下信息:

  • 使用 -S 选项指定 SQL Server 实例的名称。

  • 使用 -E 选项,以使用当前登录的用户,或者使用 -U 选项指定用户 ID,并使用 -P 选项指定密码。

  • 用于添加会话状态数据库的 -ssadd 命令行选项。

    Agent XPs SQL Server 选项:

     
     
    EXECUTE sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'Agent XPs', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'show advanced options', 0
    RECONFIGURE WITH OVERRIDE
    GO
    

    Agent XPs 选项的所有 SQL Server Express 实例运行这些 Transact-SQL 命令。

-sstype 选项可能的值:

选项

说明

t

如果将会话数据存储到 tempdb 数据库中,则在重新启动 SQL Server 时将丢失会话数据。

p

将会话数据存储到 ASPState 数据库中,而不是存储到 tempdb 数据库中。

c

-d 选项包括自定义数据库的名称。

例如,下面的命令将在名为“SampleSqlServer”的 SQL Server 实例上创建一个名为 ASPState 的数据库,并指定会话数据也存储在 ASPState 数据库中:

aspnet_regsql.exe -S SampleSqlServer -E -ssadd -sstype p

注意

或者,运行 ASP.NET 1.0 或 ASP.NET 1.1 的 Web 服务器也可以将持久性会话状态定向到已安装 ASP.NET 2.0 会话状态架构的 SQL Server 中。

有 关设置 SQL Server 模式以实现故障转移群集的更多信息,请参见位于 http://support.microsoft.com 上的 Microsoft 知识库中的文章 323262“How to use ASP.NET session state SQL Server Mode in a failover cluster”(如何在故障转移群集中使用 ASP.NET 会话状态 SQL Server 模式)。

customProvider 特性,将 ASP.NET 会话状态配置为使用该提供程序实例来存储和检索会话数据。

下面的示例演示了一个 Web.config 文件中的一些元素,这些元素指定 ASP.NET 会话状态使用自定义会话状态存储提供程序:

 
 
<configuration>
  <connectionStrings>
    <add name="OdbcSessionServices" 
      connectionString="DSN=SessionState;" />
  </connectionStrings>

  <system.web>
    <sessionState 
      mode="Custom"
      customProvider="OdbcSessionProvider">
      <providers>
        <add name="OdbcSessionProvider"
          type="Samples.AspNet.Session.OdbcSessionStateStore"
          connectionStringName="OdbcSessionServices" 
          writeExceptionsToEventLog="false" />
      </providers>
    </sessionState>
  </system.web>
</configuration>

实现会话状态存储提供程序

注意

ASP.NET 模拟

相关文章: