【问题标题】:Which date formats can I use when specifying the expiry date when setting a cookie?在设置 cookie 时指定到期日期时,我可以使用哪些日期格式?
【发布时间】:2012-06-23 13:58:25
【问题描述】:

我正在使用一个设置 cookie 的函数。此函数允许将 cookie 名称、cookie 值和 cookie 的附加到期日期传递给它。

function setCookie(name, value, exdate) {
    var c_value = escape(value) + 
      ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
    document.cookie = name + "=" + c_value;
};

用法:

setCookie("my-cookie-name","my-value","Sun, 15 Jul 2012 00:00:01 GMT");

我已经使用了上述日期格式的函数,并且认为它是跨浏览器兼容的,因为我已经测试过关闭各种浏览器并重新打开它们后 cookie 是否仍然存在。我发现使用"15 Jul 2012" 之类的格式时会出现问题。这种格式在 Firefox 的开发过程中对我有用,但其他浏览器似乎只将 cookie 设置为会话 cookie。

我应该坚持使用这种格式:"Sun, 15 Jul 2012 00:00:01 GMT" 还是我可以使用适用于主流浏览器(IE 7-9、Firefox、Chrome、Opera、Safari)的到期日期的其他格式?

【问题讨论】:

    标签: javascript cookies


    【解决方案1】:

    根据测试和进一步阅读,cookie 需要 UTC/GMT 格式的日期,例如2012 年 7 月 15 日星期日 00:00:01 GMT

    因此,任何其他格式的日期,例如 2012 年 7 月 15 日,或 15/Jul/2012,或 07/15/2012,必须作为new Date 对象传递,然后通过toUTCString()toGMTString() 函数。

    因此我将我的函数编辑为以下内容:

    function setCookie(name, value, exdate) {
        //If exdate exists then pass it as a new Date and convert to UTC format
        (exdate) && (exdate = new Date(exdate).toUTCString());
        var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
        document.cookie = name + "=" + c_value;
    };
    

    【讨论】:

    • 您能否添加一个链接,以显示您在哪里找到了这些信息?
    【解决方案2】:

    The syntax specified in rfc 6265 for generating Set-Cookie headers 使用
    rfc1123-date = wkday "," SP date1 SP time SP "GMT" cookie 日期格式,因此 "Sun, 15 Jul 2012 00:00:01 GMT" 有效。

    如果我理解正确,parsing algorithm 会识别其他格式,例如:00:00:01 15 jul 2012,但不应生成它们。

    【讨论】:

    • 实际上支持 3 种格式,空格 (Sun, 06 Nov 1994 08:49:37 GMT)、破折号 (Sunday, 06-Nov-94 08:49:37 GMT) 和“混合” (Sun Nov 6 08:49:37 1994)
    • @AlexisWilke 点击链接(里面有rfc1123-date
    • 是的,我看到另外两个被标记为已弃用。所以你应该只使用第一个。
    【解决方案3】:

    找到日期格式ddd, dd MMM yyyy HH':'mm':'ss 'GMT'。愿有人发现有用。也很好参考here

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多