当应用程序 B 打开时,应用程序 A 中的会话被清除
Session is cleared in App A when App B is opened
我在 IIS 中托管了两个 .NET 核心应用程序,每个应用程序都在自己的应用程序池中。这是行为:
- 打开应用程序 A,它按预期运行。保存、搜索等
- 在新标签页中打开应用 B,它按预期运行。
- 切换回应用程序 A,它立即失败,因为它的会话数据不存在。显然打开应用程序 B 影响了应用程序 A。
- 在同一个选项卡中重新启动应用程序 A,它可以正常工作。
- 切换到应用 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) 相同的域?如果是,那是你的问题。
您已经确定了此问题的两个简单解决方法:
- 在不同的浏览器(例如 Edge 和 IE)中打开应用程序
- 在隐身浏览器中打开一个应用程序
至于永久修复,最简单的方法可能是重命名一个或两个应用程序的会话 ID,以确保它们不冲突。 This Whosebug answer 在 Web.Config 中展示了如何执行此操作作为示例。
我在 IIS 中托管了两个 .NET 核心应用程序,每个应用程序都在自己的应用程序池中。这是行为:
- 打开应用程序 A,它按预期运行。保存、搜索等
- 在新标签页中打开应用 B,它按预期运行。
- 切换回应用程序 A,它立即失败,因为它的会话数据不存在。显然打开应用程序 B 影响了应用程序 A。
- 在同一个选项卡中重新启动应用程序 A,它可以正常工作。
- 切换到应用 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) 相同的域?如果是,那是你的问题。
您已经确定了此问题的两个简单解决方法:
- 在不同的浏览器(例如 Edge 和 IE)中打开应用程序
- 在隐身浏览器中打开一个应用程序
至于永久修复,最简单的方法可能是重命名一个或两个应用程序的会话 ID,以确保它们不冲突。 This Whosebug answer 在 Web.Config 中展示了如何执行此操作作为示例。