4

我似乎无法在 Google Chrome 中设置寿命短的 cookie。它们要么没有被设置,要么立即被删除(无法确定是哪个,尽管结果都是一样的)。这只发生在未来到期时间为 4 小时或更短的情况下。如果过期时间大于 4 小时,并且在 Firefox 或 Safari 中没有出现问题,则相同的代码可以正常工作。这是一个例子:

不工作:

exp = new Date();
exp.setMinutes(exp.getMinutes() + 240);
document.cookie="name=value;expires=" + exp + ";path=/";

作品:

exp = new Date();
exp.setMinutes(exp.getMinutes() + 241);
document.cookie="name=value;expires=" + exp + ";path=/";

有没有人对如何解决这个问题有任何建议?

4

2 回答 2

3

事实上,我在这里查看了 Chromium 源http://code.google.com/p/chromium/source/search?q=document.cookie+expire&origq=document.cookie+expire&btnG=Search+Trunk并参考了 cookie 并在他们所有的 expires= 语句,他们在日期对象上调用 .toGMTString() 或 .toUTCString() 所以它可能是一个特殊的日期格式化函数,当它隐含地将其转换为一种格式而不是明确设置一个时,它可能会搞砸。?!

而不是这个:

document.cookie="name=value;expires=" + exp + ";path=/";

试试这个:

document.cookie="name=value;expires=" + exp.toUTCString() + ";path=/";
于 2012-08-09T18:57:00.290 回答
1

似乎使用 jQuery.cookie 对我有用:

Command: exp = new Date()
Output: Thu Aug 09 2012 11:39:21 GMT-0700 (Pacific Daylight Time)

Command: exp.setMinutes(exp.getMinutes() + 240)
Output: 1344551961739

Command: $.cookie('testCookie', 'test', {path: '/', expires: exp});
Output: "testCookie=test; expires=Thu, 09 Aug 2012 22:39:21 GMT; path=/"

这是在 Windows 上的 Chrome 控制台中完成的。

注意:格林威治标准时间 22:39 是格林威治标准时间 -0700 的 15:39,因此到期时间为 4 小时。

编辑:我直接测试了您的代码,它似乎不接受设置为在不到 4 小时内过期的 cookie。这不使用 jQuery:

exp = new Date();
exp.setMinutes(exp.getMinutes() + 240);
document.cookie="testCookie2=test;expires=" + exp.toUTCString() + ";path=/";
于 2012-08-09T18:44:19.750 回答