asp.net - 丢失 ASP.NET/SQL Server 的 session 状态

标签 asp.net asp.net-mvc machinekey sql-session-state

我有一个 ASP.NET MVC 工作流程,配置为由负载平衡器管理的两个网站。这些网站使用 Sql Server 作为 session 状态提供程序,并关闭身份验证(这不是必需的)。

现在,我似乎偶尔会丢失 session 状态,我相信这是因为请求正在由备用服务器处理,所以本质上用户正在从一个服务器跳转到另一个服务器,具体取决于负载均衡器认为如何合适。我并不总是在工作流程的同一阶段“丢失 session 状态”,所以我相信这与网络场配置+ sql server session 状态有关。

两个应用程序使用相同的计算 secret 钥来加密和解密存储在 SQL Server 中的 session 状态。

两台服务器上的配置如下:

<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD" 
            validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />

我已经确认这在两台服务器上是相同的,是否有我遗漏的东西?

当我使用单个服务器时,在我的开发环境中不会发生这种情况。

我担心我正遭受周五忧郁症的困扰,毫无疑问下周就会找到答案,遗憾的是我不想等待!

有什么想法吗?

最佳答案

发现问题了。

当您创建希望使用 Sql Server 共享 session 状态的应用程序时,它们需要在 IIS 中配置相同的 ID。这是因为生成的 session ID是根据应用程序ID生成的。 (内部应用程序 ID 类似于 LM/W3SVC/1

对于 IIS 中的每个应用程序,两台服务器具有不同的 ID。解决方法是在每台服务器上的“管理网站 -> 高级设置”下更改 ID。

enter image description here

关于asp.net - 丢失 ASP.NET/SQL Server 的 session 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555000/

相关文章:

c# - 如何在下拉列表 selectedIndexChanged 事件上删除动态创建的文本框控件并在新的选定值上重新创建新的动态控件

c# - 以编程方式访问资源文件中的值

javascript - 未经授权的 AJAX 请求返回状态代码 200 而不是 401

c# - 为什么我只*随机*在单个服务器环境中获得 "Validation of viewstate MAC failed"?

c# - 如何在代码中设置指向文本框的超链接。 - 与其他 HTML 标签

asp.net - 在构建时自动停止/重新启动 ASP.NET 开发服务器

ASP.NET 服务器迁移

asp.net - 表单例份验证票是否足够安全?

c# - 使用 Razor 按表中的日期对模型元素进行分组

asp.net-mvc - ASP.NET MVC - Html.TextBox - 值未通过 ViewData 字典设置