gpt4 book ai didi

internet-explorer - Set-Cookie : Expire property, 时钟偏差和 Internet Explorer 问题

转载 作者:可可西里 更新时间:2023-11-01 15:11:16 26 4
gpt4 key购买 nike

有一个 header Max-Age 允许指定 cookie 的过期时间。不幸的是,Internet Explorer 6、7、8 和可能更高版本不支持 Max-Age,并且需要带有 GMT 绝对日期的 Expires header 。

特定客户端上的 GMT 时间和 TZ 设置可能不正确的情况并不少见。考虑未正确定义时区并手动调整时钟的用户。

不仅如此,有时用户可能没有意识到许多分钟的显着时钟偏差。

在这种情况下,其 GMT 时间可能会偏移几个小时。实际上,它会阻止服务器设置任何 需要较短过期时间的 cookie。假设如果 TZ 不正确,则永远不会设置最长 10 分钟的 cookie。

关于如何解决问题的原始想法(不起作用或有问题):

  1. 当然最好是使用 Max-Age 甚至同时指定两者,因为所有浏览器都会忽略“过期”部分 - 但它在 IE 中不起作用
  2. 我想到的另一种方法是设置 Date: header,希望 IE 知道计算差异以解决时钟偏差...但这对 IE 没有帮助。
  3. 根据请求(使用 JavaScript)从客户端获取时间,然后计算时钟差异,然后根据需要调整 Expire header 。然而,它需要复杂的数据操作,包括将时间提交给服务器的某种方式。

问题:

  1. 在 IE 中处理 cookie 过期时间的最佳和常见做法是什么?
  2. 你是如何在你的应用程序中做到这一点的

最佳答案

  • 将 Max-Age 设置为除 Microsoft 理解之外的所有人。
  • 添加仅在 IE 上运行的 Javascript,以根据浏览器的时钟将 Max-Age 转换为 UTC,并在 cookie 上设置过期时间。请注意,JavaScript 无法读取 cookie 中设置的 Max-Age,因此您必须以其他方式向 JavaScript 提供该信息(连同任何其他选项)。

来自 QuirksMode

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 namemaxAge 以及 otherOptions(例如路径、域)之后:

var date = new Date();
date.setTime(date.getTime() + (maxAge * 1000));
document.cookie = name + "=" + readCookie(name) +
'; expires=' + date.toUTCString() + otherOptions

关于internet-explorer - Set-Cookie : Expire property, 时钟偏差和 Internet Explorer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com