Asp.Net Core - 防止相同域应用程序之间的会话 cookie 冲突

max*_*e51 5 asp.net cookies session session-cookies asp.net-core

我正在使用 ASP.Net Core 2.2。

默认情况下,会话 cookie 存储在以.AspNetCore.Session特定域命名的 cookie 中(例如:)mydomain.com

就我而言,我在域下有多个 .net 核心应用程序。 mydomain.com/Module1, mydomain.com/Module2, 等等...

在这种情况下,所有应用程序为其会话共享相同的 cookie。结果是应用程序尝试读取另一个会话并在日志中生成警告:

取消保护会话 cookie 时出错。System.Security.Cryptography.CryptographicException:在密钥环中找不到密钥 {...}。

尽管这只是一个警告并且会话似乎在每个应用程序上都运行良好,但我想知道处理这种情况的正确方法。

谢谢。

max*_*e51 9

我发现的一个解决方案是更改每个应用程序的会话 cookie 名称:

Startup / Configure()

app.UseSession(new SessionOptions() { Cookie = new CookieBuilder() { 
    Name = ".AspNetCore.Session.MyApp1"}});
Run Code Online (Sandbox Code Playgroud)

  • 您还可以在`Startup/ConfigureServices()`方法中配置自定义会话cookie名称:`services.AddSession(options => { options.Cookie.Name = ".MyApp1.Session"; });` (2认同)