【发布时间】:2013-05-01 05:47:17
【问题描述】:
有一个标头 Max-Age 允许指定 cookie 的过期时间。不幸的是,Internet Explorer 6、7、8 和可能更高版本不支持 Max-Age,并且需要带有 GMT 绝对日期的 Expires 标头。
特定客户端上的 GMT 时间和 TZ 设置可能不正确的情况并不少见。考虑没有正确定义他的时区并手动调整时钟的用户。
不仅如此,有时可能会出现很多分钟的明显时钟偏差,而用户并没有意识到这一点。
在这种情况下,其 GMT 时间最多可能会偏移几个小时。实际上,它会阻止服务器设置需要短过期时间的任何 cookie。假设如果 TZ 不正确,则永远不会设置最长 10 分钟的 cookie。
关于如何解决问题的原始想法(不起作用或有问题):
- 当然最好是使用 Max-Age 甚至同时指定两者,因为所有浏览器都会忽略“过期”部分 - 但它在 IE 中不起作用
- 我想到的另一种方法是设置 Date: header 希望 IE 知道计算差异以解决时钟偏差...但这对 IE 没有帮助。
- 根据请求从客户端获取时间(使用 JavaScript),然后计算时钟差异,然后根据需要调整 Expire 标头。但是,它需要复杂的数据操作,包括将时间提交给服务器的某种方式。
问题:
- 在 IE 中处理 cookie 过期时间的最佳和常见做法是什么?
- 如何在您的应用程序中做到这一点
【问题讨论】:
-
“考虑一个最长 10 分钟的 cookie”——在所描述的条件下很难解决这个问题。我宁愿存储 server-side 时间,直到该值也应被视为有效到 cookie 中(并将其设置为更长的时间范围) - 然后您可以检查 server-side when如果您仍然想将它的价值用于某事,是否再次接收该 cookie……
-
我明白 10 分钟是很短的时间。但无论如何,即使你需要 30 分钟,它仍然可能是个大问题。
-
一般来说,我们要么设置会话cookie,它只持续到浏览器退出,要么我们设置过期日期为未来几天或几年的cookie,因此时区问题不是问题。
标签: internet-explorer http cookies