需要在加载会话之前更改会话ID

时间:2010-01-06 22:37:38

标签: .net asp.net session

我正在尝试使用内置的.NET会话处理来跨多个ASP.NET应用程序共享会话。我无法使用自定义会话实现。

  • 我有多个Web服务器,每个服务器都有自己的主机名,配置为指向相同的代码库
  • 我正在使用手动设置应用程序名称的HttpModule,因此只要对不同服务器的请求具有相同的会话ID,它们最终将使用相同的会话数据

现在我需要能够在第一次加载会话之前设置会话ID - 我可以将其设置为更改cookie并在第一次加载时重定向,但我真的更愿意在没有重定向。

ETA:我们已经在使用MS会话状态服务器来处理池中服务器之间的会话共享。此问题专门针对跨应用程序共享会话 - 即http://www.example.comhttp://shopping.example.com处的应用程序需要能够共享相同的会话数据。

2 个答案:

答案 0 :(得分:1)

Microsoft称其为moved to an out-of-process model用于ASP.NET会话,允许支持从存储位置共享会话状态并在服务器场中共享它。

  

支持服务器场   配置。通过移动到   进程外模型,ASP.NET也   解决服务器场问题。该   新的进程外模型允许所有   服务器场中的服务器共享会话   国家进程。你可以实现这个   通过更改ASP.NET配置   指向一个公共服务器。

Windows状态服务器会话存储

您可以使用StateServer设置...

Sample web.config

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

StateServer模式,用于存储会话   状态在一个叫做的单独过程中   ASP.NET状态服务。这确保了   如果是,则会保留该会话状态   Web应用程序也重新启动   使会话状态可用   Web场中的多个Web服务器

SQL Server会话存储

如果您有支持SQL Server数据库,则可以选择SQLServer模式

  

SQLServer模式存储会话状态   一个SQL Server数据库。使用此模式   确保会话状态   如果是Web应用程序,则保留   重新启动并进行会话状态   可用于a中的多个Web服务器   网络农场。

Sample web.config

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

还有其他选择。 This MSDN article contains pointers about how to further set up such choices...

答案 1 :(得分:0)

也许您应该考虑采用不同的方法。存储您需要在所有ASP.NET应用程序都可以访问的数据库中共享的任何数据。

不应在不同的应用程序之间共享会话。