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

时间:2020-12-19 01:07:30

标签: c# asp.net-core cookies .net-core asp.net-core-3.1

我有两个托管在同一主机上的 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 的路径设置为默认值 / 以外的其他内容?

1 个答案:

答案 0 :(得分:0)

引自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