标题Max-Age允许指定cookie的到期时间。不幸的是,Internet Explorer 6,7,8以及之后可能不支持Max-Age,并要求Expires标题的格式为GMT绝对日期。
特定客户端上的GMT时间和TZ设置可能不正确并不罕见。考虑没有正确定义时区的用户并手动调整时钟。
更重要的是,有时可能会有很长时间的显着时钟偏差,用户不知道它们。
在这种情况下,其GMT时间可能会转移几个小时。实际上,它会阻止服务器设置任何需要短暂到期时间的 cookie。如果TZ不正确,请考虑永远不会设置最长10分钟的cookie。
关于如何解决问题的原创想法(不起作用或有问题):
问题:
答案 0 :(得分:8)
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
然后从某个地方获得Cookie name
和maxAge
以及otherOptions
(例如路径,域名):
var date = new Date();
date.setTime(date.getTime() + (maxAge * 1000));
document.cookie = name + "=" + readCookie(name) +
'; expires=' + date.toUTCString() + otherOptions
答案 1 :(得分:5)
我所做的是将时间转移到服务器端。您永远无法确定客户端的时间,但您知道您的服务器永远不会撒谎。
答案 2 :(得分:2)
如果我有这种要求,我会在我的应用程序中管理cookie。在cookie的内容中包含服务器时间到期时间戳,使用加密或散列保护cookie,如果cookie中的时间戳已经过去,则拒绝cookie。
这几乎是强制执行自动登录cookie过期的方式。
答案 3 :(得分:0)
仅供参考,IE 11支持从版本11.0.15063.0开始的cookie上的Max-Age。
我找不到微软的任何文档来报告这一点,但在开发过程中我们发现我们的IE本地版本正在运行,但客户却没有。我们将其缩小到IE版本和Cookie上的Max-Age属性的差异。