Cookie不随CORS网络请求一起发送

时间:2019-03-01 10:29:19

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

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

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

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

当我尝试设置没有Expires日期的cookie时,将发送cookie,但仅在浏览器打开时将其存储在浏览器中(会话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。

这是HTTP响应,其中设置了带有到期日期的cookie:

enter image description here

2 个答案:

答案 0 :(得分:1)

您的服务器需要包含以下CORS响应标头:

 Access-Control-Allow-Credentials: true

除了您已经发送的Access-Control-Allow-Origin标头之外。

没有ACAC标头,浏览器将不会处理来自原始位置的任何Set-Cookie响应标头。我怀疑cookie是由Set-Cookie响应头在另一个响应中设置的。

答案 1 :(得分:1)

解决方案是忽略cookie的=ARRAYFORMULA(TEXT(TO_DATE(INDEX(SPLIT(IMPORTXML( "https://"&C13&".op.gg/summoner/userName="&B13; "//div[@class = 'TimeStamp']"); " "); ; 1)); "yyyy-mm-dd")) 属性。这样可以将cookie以及来自javascript代码的跨站点请求一起发送。

samesite属性(https://www.owasp.org/index.php/SameSite)的可能值:

  • 严格-不为跨站点请求发送cookie
  • lax-仅当用户遵循常规链接时,才为跨站点请求发送cookie
  • (未设置)-Cookie发送用于跨站点请求

在.NET Core中,由于默认值为samesite,因此需要显式设置cookie以便不创建samesite属性:

lax