javascript - Cookie 不随 CORS Web 请求一起发送

标签 javascript .net-core cors asp.net-core-2.1

我正在尝试设置一个带有过期日期的 cookie:

response.Cookies.Append("theKey", value, new CookieOptions() { Expires = DateTime.Now.AddMonths(12) });

cookie 存储在浏览器中,但不会在后续的跨站点 Web 请求中发送。

当我尝试设置不带过期日期的 cookie 时,会发送 cookie,但仅在浏览器打开时才将其存储在浏览器中( session cookie)。

这是一个跨站点请求。调用该函数的javascript代码是:

var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", url, true);
xmlHttp.withCredentials = true;
xmlHttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
        //console.log(this.responseText);
    }
};
xmlHttp.send(null);

有没有办法在跨站点请求中发送包含Expires日期的cookie?

客户端 Web 应用程序和函数应用程序(尝试设置 cookie)都使用 https。

这是设置带有过期日期的 cookie 的 HTTP 响应:

enter image description here

最佳答案

解决方案是设置 cookie 的 SameSite 属性。这允许将 cookie 与来自 JavaScript 代码的跨站点请求一起发送。

SameSite 属性 ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite ) 的可能值:

  • 严格 - 不会为跨站点请求发送 cookie
  • lax(默认)- 仅当用户点击常规链接(例如单击)时,才会针对跨站点请求发送 Cookie
  • 无(之前的默认值)- 为跨站点请求发送 cookie

在 .NET Core 中,需要使用 SameSite 属性显式设置 cookie,因为默认值为 lax:

response.Cookies.Append("theCookie", value, new CookieOptions() 
{ 
    Expires = DateTime.Now.AddMonths(12), 
    SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None 
});

关于javascript - Cookie 不随 CORS Web 请求一起发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54942698/

相关文章:

c# - asp.net core 2.2升级并且类库中不提供HttpSessionState

.net - 如何修复 Unix LocalMachine X509Store 仅限于 Root 和 CertificateAuthority 存储错误

ajax - Web 套接字会让 ajax/CORS 过时吗?

javascript - JQuery 捕获任何 ajax 错误

javascript - 如何使用 javascript 打印弹出窗口的内容?

c# - .net-core 中 Int32 的真正实现在哪里

javascript - 如果我使用非类/原型(prototype)方法 : Origin file://is not allowed by Access-Control-Allow-Origin,则不会发生此错误

angular - .NET 核心 2.0 Angular 5 : Allowing Cors

javascript - 检索指定对象的属性和方法

php - 此表单如何与 <form> 标记之外的输入标记一起使用?