JS Cookie在服务器端不可用?

时间:2019-02-15 15:27:44

标签: javascript asp.net-core

这是我使用JavaScript创建Cookie的方法,然后将其重定向到购物车页面。

var d = new Date();
d.setTime(d.getTime() + (1 * 24 * 60 * 60 * 1000));
var expires = ";expires=" + d.toUTCString();
var product = { productId: btn.value, colorId: productColorId, quantity: 0 };
products.push(product);
document.cookie = "products=" + JSON.stringify(products) + expires + "; path=/; SameSite=strict";
window.location.href = "cart";

我可以在浏览器的cookie部分找到该cookie,但是在服务器端却什么也没得到。

起初我使用此代码,但我得到空值。

string products = HttpContext.Request.Cookies["products"];

之后,我尝试这段代码

if (HttpContext.Request.Cookies.TryGetValue("products", out cookieValue))
{
   // TODO: use the cookieValue
}
else
{
   // this cookie doesn't exist.
}

它总是在其他地方运行,看来,甚至找不到cookie。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

为回应评论,禁止使用javascript中的Cookie标头,这意味着无法以编程方式进行设置。只有浏览器可以设置它,并且可以选择不发送cookie信息和HTTP请求,具体取决于他们的浏览器设置。 (通常在隐私设置中)

首先,我将确认确实发送了cookie标头。通常,您可以通过使用浏览器的Web检查器并查看网络请求来找到答案。这是chrome的屏幕截图:

Google Chrome Network tab

如果没有看到Cookie标头,那么我建议您仔细检查浏览器的隐私设置,以确保启用Cookie,并在安装了广告/跟踪阻止程序后将其禁用。如果是这种情况,很遗憾,除了乞求用户更改设置或禁用广告拦截器外,您无能为力。

如果您看到Cookie标头,则表明这可能是后端代码中的问题,但是我对ASP.NET并不熟悉,因此我无法真正对此发表评论。

希望这会有所帮助

答案 1 :(得分:0)

根据this documentation,可以选择在双引号中设置a,并且允许使用除CTL,空格,双引号,逗号,分号和反斜杠之外的任何US-ASCII字符。

尝试在javascript中进行以下更改,使用encodeURIComponent()转换双引号

document.cookie = "products=" + encodeURIComponent(JSON.stringify(product)) + expires + "; path=/; SameSite=strict";

cookie值的屏幕快照在服务器端获取 enter image description here enter image description here