我使用 SQL Server 数据库跨 2 个生产 Web 服务器管理共享 session 状态。
最近我意识到(而且我几乎可以肯定以前不是这种情况)当从服务器跳转到服务器时, session 并没有真正共享。
两台服务器在同一个域上运行同一个网站,并使用硬件负载平衡器进行平衡。两者都在 IIS7 下运行。并且在两台服务器中,ASP.NET 状态服务都在运行。
在检查 HTTP header 并使用 SQL 分析器捕获交叉引用时,我发现我认为可能是问题所在。
我的 cookie 中的 SessionId 值是一个 24 个字符的字符串,例如:y4hfairc2xbwlupkdsqpv0nz
ASPState
收到的 SessionID数据库和存储在那里更长,并具有服务器特定的 8 个字符后缀。例如2476b033
或 2b7731d2
这在存储在数据库中的所有 session 中都是一致的。
因此,SessionID 看起来像:y4hfairc2xbwlupkdsqpv0nz2476b033
或 y4hfairc2xbwlupkdsqpv0nz2b7731d2
显然,因为 session 不是共享的,每个服务器都维护自己的 session 状态。
任何使用类似配置的人以前可能遇到过这种情况?
谢谢
更新
结果在这里:SessionId saved in SQL Server is different from the one generated from the asp.net runtime额外的字符是 IIS AppID。现在我必须找出如何更改它以便两台服务器匹配。到目前为止没有运气。
任何人?
最佳答案
为了完整性,回答我自己的问题。
感谢这个:https://serverfault.com/questions/288981/load-balanced-iis-7-5-web-server-asp-net-session-state-problem
我发现了如何匹配 AppID。
现在一切似乎都很好。
关于ASP.NET - 当 session 存储在 SQL Server 中时跨服务器的不同 SessionId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11987850/