Chrome不允许过期少于4小时的Cookie

时间:2012-08-09 18:36:05

标签: javascript google-chrome cookies

我似乎无法在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=/";

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

2 个答案:

答案 0 :(得分:3)

确实我在这里查看了Chromium Source 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=/";

答案 1 :(得分: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=/"

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

注意:格林威治标准时间22:39在格林尼治标准时间-0700为15:39,所以到期时间为4小时。

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

exp = new Date();
exp.setMinutes(exp.getMinutes() + 240);
document.cookie="testCookie2=test;expires=" + exp.toUTCString() + ";path=/";