当应用程序 B 打开时,应用程序 A 中的会话被清除

Session is cleared in App A when App B is opened

我在 IIS 中托管了两个 .NET 核心应用程序,每个应用程序都在自己的应用程序池中。这是行为:

  1. 打开应用程序 A,它按预期运行。保存、搜索等
  2. 在新标签页中打开应用 B,它按预期运行。
  3. 切换回应用程序 A,它立即失败,因为它的会话数据不存在。显然打开应用程序 B 影响了应用程序 A。
  4. 在同一个选项卡中重新启动应用程序 A,它可以正常工作。
  5. 切换到应用 B,它不再有效。

这两个应用程序都是针对框架 4.6.1 的 2.1 应用程序。

ConfigureServices 有:

services.AddSession(s => s.IdleTimeout = TimeSpan.FromMinutes(450));

配置有:

app.UseSession();

根据评论中的讨论,听起来您的两个应用正在争夺同一个会话 cookie。这将解释您观察到的行为,尤其是当您使用两种不同的浏览器时问题如何消失。

为了检验这个假设,打开应用程序 A,并检查 Cookie。 (例如,在 Chrome 中,您可以在开发人员控制台的“应用程序”选项卡上查看 Cookie。)查找表示活动会话 ID 的 Cookie。默认情况下,此 cookie 在 .NET 中命名为 ASP.NET_SessionId。记下该 Cookie 的域。现在对应用程序 B 执行相同的测试。Cookie 是否具有 (1) 相同的名称和 (2) 相同的域?如果是,那是你的问题。

您已经确定了此问题的两个简单解决方法:

  1. 在不同的浏览器(例如 Edge 和 IE)中打开应用程序
  2. 在隐身浏览器中打开一个应用程序

至于永久修复,最简单的方法可能是重命名一个或两个应用程序的会话 ID,以确保它们不冲突。 This Whosebug answer 在 Web.Config 中展示了如何执行此操作作为示例。