【问题标题】:Browser keeps multiple values for a single cookie name-value pair浏览器为单个 cookie 名称-值对保留多个值
【发布时间】:2017-01-30 15:40:26
【问题描述】:

我们有一个网上商店。我们使用一个 cookie 来存储每个订单/用户的订单 ID。购物篮中的所有商品和用户的地址信息都与该 ID 相关。 cookie 仅在订单完成或其值为空时才会更改。我们会在每次页面加载时与服务器检查 cookie,只有在满足上述条件时才会更改它。

几个月前,我们发现在某些情况下,浏览器可以保留该 cookie 值的多个版本,并在页面加载时在这些值之间随机“切换”。此外,该值不会被覆盖 - 如果浏览器从值 A 切换到值 B,稍后加载一些页面它可以再次加载值 A。浏览器最多可以为单个 cookie 保存 5 个(可能更多)值,并且随着用户浏览我们的网上商店,它会不断随机更改它们。这是非常有问题的,因为一旦更改了 cookie 值 - 篮子内容也会随之更改。我们主要在 Google Chrome 和 Internet Explorer 中遇到了这个问题。尝试在控制台中检查 cookie 值仅显示用于当前页面加载的值。

我们使用以下函数来设置cookies:

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 order ID cookie setter 函数在页面加载时运行。这是我们唯一更改订单 ID cookie 的地方。 最近,我们在打开开发工具的情况下测试了这种行为,并显示了有趣的结果。在我们的 cookie 设置函数有机会运行之前,一个简单的页面重新加载可以将请求的 cookie 标头更改为包含不同 cookie 值的请求。我们认为这可能是一个缓存问题(请求被缓存并稍后使用),但是当我们将服务器设置为返回 no-cache 和 no-store 响应标头时,这种行为似乎仍然存在。

【问题讨论】:

  • What could be causing such behaviour? 我的猜测是您正在重新设置页面加载时的 cookie 值。你所看到的不应该发生。
  • 重新设置值将从服务器获取 .NET 中的新 Guid.NewGuid() 并将其作为新值返回。几乎不可能两次返回相同的值,或者像 A->B->A 这样更改值。我同意我们所看到的在理论上是不可能的。

标签: javascript google-chrome internet-explorer cookies browser


【解决方案1】:

看看 Nate 对这个问题的回答 How to handle multiple cookies with the same name?

希望对你有帮助!!

【讨论】:

  • 他解释了在设置 cookie 时使用不同的路径/域会发生什么。我们总是在 cookie 设置器函数中使用相同的“path=/”,并且我们没有子域可以在未指定域时创建重复值。
猜你喜欢
  • 1970-01-01
  • 2011-12-21
  • 2010-11-11
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多