5

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

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

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

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

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

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

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

谢谢

更新

事实证明:SQL Server 中保存的 SessionId 与从 asp.net 运行时生成的不同,额外的字符是 IIS AppID。现在我必须找出如何更改它,以便两台服务器匹配。到目前为止还没有运气。
任何人?

4

1 回答 1

3

为了完整起见,回答我自己的问题。

多亏了这个:https ://serverfault.com/questions/288981/load-balanced-iis-7-5-web-server-asp-net-session-state-problem

我发现了如何匹配 AppID。

现在一切似乎都很好。

于 2012-08-18T07:43:13.797 回答