这是我使用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。
有什么建议吗?
答案 0 :(得分:0)
为回应评论,禁止使用javascript中的Cookie标头,这意味着无法以编程方式进行设置。只有浏览器可以设置它,并且可以选择不发送cookie信息和HTTP请求,具体取决于他们的浏览器设置。 (通常在隐私设置中)
首先,我将确认确实发送了cookie标头。通常,您可以通过使用浏览器的Web检查器并查看网络请求来找到答案。这是chrome的屏幕截图:
如果没有看到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";