【发布时间】:2021-08-11 21:17:08
【问题描述】:
我正在尝试设置一个带有过期日期的 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。
这是设置 cookie 过期日期的 HTTP 响应:
【问题讨论】:
-
@MartinStaufcik 如果你使用 Postman,你会得到同样的行为吗? Postman 不会检查跨域,因此您可以尝试保持代码原样并删除 CORS,并检查 cookie 是否在响应中正确传递。
-
除了弄清楚为什么会这样,如果你保存一年,那为什么不直接使用 localStorage
-
@mplungjan 我不能使用localStorage,因为我需要能够在后续的网络请求中发送cookie,它会识别用户
-
但是你至少可以在没有过期的情况下发送它
-
@Manuel 我尝试在 Chrome 中查看其他域的 cookie,cookie 保存在浏览器中,所以问题是 cookie 没有在后续请求中发送。我可能会通过在 javascript 中创建第一个域 cookie 并将其作为 ajax 调用中的参数发送来解决它。
标签: javascript .net-core cors asp.net-core-2.1