0

我正在使用(客户端)cookie(在javascript中)来存储用户选择的键/值对,从一个会话到下一个会话以及从一个页面到另一个页面。似乎 Chrome、Safari 和 Firefox 理解一个键只能有一个值,但 IE 采取不同的看法。例如:我有一个功能(“viewMode”),它可以采用以下四个用户可选值之一:-2、-1、0 或 1。当我设置 cookie 时,我给它的到期日期是今天 + 100 天.

function setCookie(c_name, value, expireDays) {
    expireDays *= 1;
    var expireDate = new Date();
    expireDate.setDate(expireDate.getDate() + expireDays);
    var c_value = escape(value) + ((expireDays == null) ? "" : "; expires=" + expireDate.toUTCString());
    document.cookie = c_name + "=" + c_value; 
}

默认值为 0。当用户选择值时,比如 1,生成调用

setCookie("viewMode", 1, 100); 

IE 存储了这两个值,但其他人理解密钥已被覆盖的概念。这是下一次加载的 HTTP GET 的 cookie 组件:

Cookie: dispText=FileName; viewMode=0; MultiTrack=0; showClouds=0; smokeTrailLength=256; IGCAltSource=0; HideTracks=0; ColorSpeed=1; showCompass=0; viewMode=1; chosenDirectoryPath=C%3A%5CAlan%5CSTarTraXdata%5CTestTracks; IGCAltSource=1; showCockpitInstruments=0; showJavaOPenPopup=0; dispText=None; smokeTrailLength=-1; PHPSESSID=d96b0827725b1e6e313dcdfddfaed0a0

如您所见,cookie“viewMode”出现了两次,一次为 viewMode=0,一次为 viewMode = 1。所以... cookie 真的是一个键/值对,而 IE 出错了,还是什么?我看过一些帖子暗示 cookie 是键/值/日期三元组,但这似乎在其他地方不受支持,我在 W3C 文档中找不到规范。

4

1 回答 1

0

这不是答案,但我的问题已通过解决方法解决!我什至试图通过删除 viewMode cookie

document.cookie="viewMode =; expires=15/02/2003 00:00:00"; 

没有任何成功。

一气之下,我删除了所有的 IE cookie,现在一切正常!

似乎“viewMode=1”cookie 是某种怪物(“Cookie Monster”明白了哈哈),它对被更改或删除没有反应。现在我的页面正在按预期愉快地更新 viewMode cookie。

所以我有一个解决方法,但我仍然很想知道到底发生了什么。

于 2012-08-07T00:58:57.213 回答