我正在尝试设置一个具有过期日期的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:
答案 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)的可能值:
在.NET Core中,由于默认值为samesite
,因此需要显式设置cookie以便不创建samesite
属性:
lax