我使用 SQL Server 数据库管理跨 2 个生产 Web 服务器的共享会话状态。
最近我意识到(而且我几乎可以肯定以前不是这种情况)从服务器跳转到服务器时会话并没有真正共享。
两台服务器在同一个域上运行同一个网站,并使用硬件负载平衡器进行平衡。两者都在 IIS7 下运行。并且在两台服务器中,ASP.NET 状态服务都在运行。
在检查 HTTP 标头并使用 SQL 分析器捕获交叉引用时,我发现我认为可能是问题所在。
我的 cookie 中的 SessionId 值是一个 24 个字符的字符串,例如:y4hfairc2xbwlupkdsqpv0nz
由数据库接收并存储在那里的 SessionIDASPState
更长,并且具有服务器特定的 8 个字符后缀。例如2476b033
,或者2b7731d2
在存储在数据库中的所有会话中是一致的。
因此 SessionID 看起来像:y4hfairc2xbwlupkdsqpv0nz2476b033
或y4hfairc2xbwlupkdsqpv0nz2b7731d2
显然,因为会话不共享,每个服务器都维护自己的会话状态。
任何使用类似配置的人之前可能遇到过这种情况?
谢谢
更新
事实证明:SQL Server 中保存的 SessionId 与从 asp.net 运行时生成的不同,额外的字符是 IIS AppID。现在我必须找出如何更改它,以便两台服务器匹配。到目前为止还没有运气。
任何人?