【问题标题】:Losing Session State with ASP.NET/SQL Server使用 ASP.NET/SQL Server 丢失会话状态
【发布时间】:2012-05-11 16:12:55
【问题描述】:

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

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

两个应用程序使用相同的机器密钥来加密和解密存储在 sql server 中的会话状态。

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

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

我已经确认这在两台服务器上都是相同的,我有什么遗漏吗?

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

我担心我会患上周五的忧郁症,毫无疑问下周会找到答案,遗憾的是我不想等待!

有什么想法吗?

【问题讨论】:

  • 我做了,会话超时设置为 20 分钟,这似乎是从一个页面移到另一个页面发生的,根本没有花太多时间在页面上。
  • 我遇到了一个类似但不同的问题。想在此处添加此内容,以防其他人遇到问题并最终出现在此处。最后,我不得不更改 machineKey 以指定解密和验证方法,而不是依赖默认值。因此,当我在 IIS 中生成 machineKey 时,我选择了解密 3DES 和验证 HMASCHA256。

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


【解决方案1】:

发现问题。

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

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

【讨论】:

  • 我有同样的问题。我也改变了appID,machineKey,但仍然失去会话。
  • @AlexNguyen 你试过同样的 appID 和 machinekey 吗?
  • 为什么他们需要在 IIS 中配置相同的 ID? 为什么在文档中没有那么明显? MSDN 中是否有任何完整文档
【解决方案2】:
  1. 使用 IIS 管理器,在根级别和网站级别仔细检查您的计算机密钥设置。

  1. 查看机器键元素上的 IsolateApps 修饰符 - http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.100%29.aspx

  2. 您最近是否从 3.5 升级到 4.0?

  3. 不得已 - 回收两台机器上的 appPools,然后重新启动 IIS。

【讨论】:

    【解决方案3】:

    会话具有(网络)应用范围。看看this MS KB 是否有帮助。

    更新: 有趣的反对票。也许我的建议需要更明确。

    除了匹配机器密钥,您必须匹配站点的 IIS 配置(所以它是 “相同的应用程序”(应用程序路径) 在 IIS 中。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2019-07-18
      • 2016-10-21
      • 2019-10-28
      • 1970-01-01
      • 2012-12-11
      • 2014-09-17
      • 2011-07-21
      • 2011-03-31
      相关资源
      最近更新 更多