我们有一个网上商店。我们使用cookie来存储每个订单/用户的订单ID。购物篮中的所有商品和用户的地址信息都与该ID相关。只有在订单完成或其值为空时才会更改cookie。我们在每个页面加载时检查服务器上的cookie,只在满足上述条件时才更改它。
几个月前,我们发现在某些情况下,浏览器可以保留该cookie值的多个版本,并且"切换"在页面加载时随机地在这些值之间。此外,该值不会被覆盖 - 如果浏览器从值A切换到值B,稍后加载几页,它可以再次加载值A.浏览器最多可以为一个cookie保存5个(可能更多)值,并且当用户浏览我们的网上商店时,它会随机更改它们。这是非常有问题的,因为一旦cookie值改变了 - 篮子内容随之改变。我们主要在Google Chrome和Internet Explorer中遇到此问题。尝试检查控制台中的cookie值仅显示当前页面加载使用的值。
我们使用以下功能设置cookie:
function SetCookie(c_name, value, exdays){
var expires = "";
if(exdays)
{
var date = new Date();
date.setTime(date.getTime() + (exdays*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = c_name + "=" + escape(value) + expires + "; path=/";
}
每当我读到有关cookie的内容时,每个人都说覆盖一个具有相同名称和路径的cookie应该会破坏以前的值。所以我在设置订单ID cookie时尝试执行以下操作(在设置之前删除cookie):
SetCookie(name , "", -1);
SetCookie(name , val, 14);
然而,问题仍然存在,浏览器会随机选择页面加载时的值。什么可能导致这种行为?有没有办法检查浏览器当前没有使用的cookie的(阴影)值?有没有办法检查浏览器存储的特定cookie名称和路径的值?
编辑:我们的javascript订单ID Cookie设置器功能在页面加载时运行。这是我们唯一更改订单ID cookie的地方。 最近,我们使用开放式工具测试了这种行为,并显示了有趣的结果。在我们的cookie setter函数有机会运行之前,简单的页面重新加载可以将请求的cookie标头更改为包含不同cookie值的请求。我们认为它可能是一个缓存问题(请求被缓存并在以后使用),但是当我们设置服务器以返回no-cache和no-store响应头时,似乎这种行为仍然存在。
答案 0 :(得分:0)
查看Nate对此问题的回答http://stackoverflow.com/questions/4056306/how-to-handle-multiple-cookies-with-the-same-name
希望它有所帮助!!