【问题标题】:ASP.NET - Different SessionId across servers when session is stored in SQL ServerASP.NET - 当会话存储在 SQL Server 中时,服务器之间的不同 SessionId
【发布时间】:2012-08-16 13:08:17
【问题描述】:

我使用 SQL Server 数据库管理 2 个生产 Web 服务器之间的共享会话状态。
最近我意识到(而且我几乎可以肯定以前不是这种情况)从服务器跳转到服务器时会话并没有真正共享。

两台服务器在同一个域上运行同一个网站,并使用硬件负载平衡器进行平衡。两者都在 IIS7 下运行。并且在两台服务器中,ASP.NET 状态服务都在运行。

在检查 HTTP 标头并使用 SQL 分析器捕获交叉引用时,我发现我认为可能是问题所在。

我的 cookie 中的 SessionId 值是一个 24 个字符的字符串,例如:y4hfairc2xbwlupkdsqpv0nz

ASPState 数据库接收并存储在那里的 SessionID 更长,并且具有服务器特定的 8 个字符后缀。例如2476b0332b7731d2 在数据库中存储的所有会话中保持一致。
因此 SessionID 看起来像:y4hfairc2xbwlupkdsqpv0nz2476b033y4hfairc2xbwlupkdsqpv0nz2b7731d2

显然因为会话不共享,每个服务器都维护自己的会话状态。

任何使用类似配置的人之前可能遇到过这种情况?

谢谢

更新

原来在这里:SessionId saved in SQL Server is different from the one generated from the asp.net runtime 额外的字符是 IIS AppID。现在我必须找出如何更改它,以便两台服务器匹配。到目前为止没有运气。
有人吗?

【问题讨论】:

  • 您是否检查过两台 Web 服务器上的机器密钥是否相同?有信息wiki.asp.net/page.aspx/1248/aspnet-and-load-balancing
  • 是的。只是重新检查以确定。 web.config 文件是相同的
  • 确实存在的一个区别是,对于每个服务器,还有一个绑定到不同的子域,使我们能够直接访问该服务器。但是我认为情况并非如此,因为我使用平衡域名访问该站点,这也是会话 cookie 的域。

标签: asp.net iis-7 session-cookies aspstate


【解决方案1】:

为了完整性回答我自己的问题。

感谢:https://serverfault.com/questions/288981/load-balanced-iis-7-5-web-server-asp-net-session-state-problem

我发现了如何匹配 AppID。

现在一切似乎都很好。

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 2012-02-25
    • 1970-01-01
    • 2021-08-05
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多