无法为 .AspNetCore.Cookies cookie 设置路径

我有两个托管在同一主机上的 AspNetCore 站点。我正在尝试解开他们的 cookie,以便它不会在标头中允许 overload the max size

我在谷歌的网站上读到,域和路径都用于决定哪些请求获取哪些 cookie。域设置为主机名。但 Path 似乎正是我所需要的。

但是当我尝试设置路径时,它实际上从未改变。我尝试了两种不同的方法。对于两者,代码如下所示:

cookieAuthenticationOptions.Cookie.Path = "/MyAppRootPath";

第一种方法将此代码添加到 services.AddAuthentication(...).AddCookie(...)

另一个是相同的代码,但在 services.ConfigureApplicationCookie(...) 中完成。 (来自这个 question 。)

对于这两种方式,当我在 Chrome 开发工具中查看我的 cookie 时,路径仍然设置为默认的 /

Cookies with path of forward slash

如何将我的 cookie 的路径设置为默认的 / 以外的路径?

stack overflow Cannot set the Path for .AspNetCore.Cookies cookies
原文答案

答案:

作者头像

引自 MDN

Path 属性表示请求的 URL 中必须存在的 URL 路径,以便发送 Cookie 标头。 %x2F ("/") 字符被视为目录分隔符,子目录也匹配。

如果您像这样配置 cookie 路径:

cookieAuthenticationOptions.Cookie.Path = "/MyAppRootPath";

此 cookie 仅适用于路径 Domain/MyAppRootPathDomain/MyAppRootPath/...

我用不同的路径测试了三个 cookie。

services.AddAuthentication()
    .AddCookie("Cookie1", options => 
    {
        options.Cookie.Name = "Cookie1";
        options.Cookie.Path = "/";
    })
    .AddCookie("Cookie2", options =>
    {
        options.Cookie.Name = "Cookie2";
        options.Cookie.Path = "/Home";
    })
    .AddCookie("Cookie3", options =>
    {
        options.Cookie.Name = "Cookie3";
        options.Cookie.Path = "/Home/Test";
    });

结果:

https://localhost:44396/

enter image description here

https://localhost:44396/Home

enter image description here

https://localhost:44396/Home/Test

enter image description here

作者头像

我迟到了 2 年,但就我而言,这是因为 cookie 名称带有 cookie 前缀 Host-。它需要将安全设置为 true 且路径为“/”,因此您无法更改路径(这里是更多详细信息的链接: https://googlechrome.github.io/samples/cookie-prefixes/ )。我们可以使用前缀 Secure-* 来设置自定义路径。