【问题标题】:Set a cookie expire after 2 hours设置 cookie 在 2 小时后过期
【发布时间】:2013-10-04 19:35:49
【问题描述】:

我有这个 JavaScript 代码:

function spu_createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else
        var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

如何让 cookie 在 2 小时后过期?

【问题讨论】:

  • 也许你的这段代码:days*24*60*60*1000 会给你一个关于正在发生的事情的线索?理解自己的代码总是一个好主意,而不是依赖复制+粘贴编程。
  • 也不要将var 放在 if 中(尤其是在 if 结束后使用它时)。这是一种糟糕的风格(并且在大多数其他语言中都是无效的,所以你以后会让自己感到困惑!)
  • 谢谢大家的回答我终于解决了我的问题。我想将它用于弹出窗口。 @Dave 你说得对,我重新组织了一下代码。

标签: javascript cookies


【解决方案1】:

试试这个:

function writeCookie (key, value, hours) {
    var date = new Date();

    // Get milliseconds at current time plus number of hours*60 minutes*60 seconds* 1000 milliseconds
    date.setTime(+ date + (hours * 3600000)); //60 * 60 * 1000

    window.document.cookie = key + "=" + value + "; expires=" + date.toGMTString() + "; path=/";

    return value;
};

用法:

<script>
writeCookie ("myCookie", "12345", 24);
</script>
//for 24 hours

【讨论】:

    【解决方案2】:

    嗯 - 最明显的事情是让“过期”日期 +2 小时? :)。在这里你有很好的原型: Adding hours to Javascript Date object?

    【讨论】:

      【解决方案3】:

      试试jquery-cookie。使使用 cookie 变得非常容易。

      【讨论】:

        【解决方案4】:

        如果您想使用相同类型的函数,请将 days 参数转换为 hours 并传递 2 以获得 2 小时的到期日期。

        function spu_createCookie(name, value, hours)
        {
            if (hours)
            {
                var date = new Date();
                date.setTime(date.getTime()+(hours*60*60*1000));
                var expires = "; expires="+date.toGMTString();
            }
            else
            {
                var expires = "";
            }
        
            document.cookie = name+"="+value+expires+"; path=/";
        }
        

        【讨论】:

          【解决方案5】:

          这样就可以了。

          var now = new Date();
          var time = now.getTime();
          time += 7200 * 1000;
          now.setTime(time);
          document.cookie = 
               name+ '=' + value + 
               '; expires=' + now.toGMTString() + 
               '; path=/';
          

          【讨论】:

          • "magic number on the wall..." 为了清楚起见,最好使用更详细的 2*60*60*1000,并在部署时依靠缩小编译器来缩短它。
          【解决方案6】:

          下面的单行代码将设置一个 cookie name,其值为 value,并在其创建后两个小时内过期。如果提供了可选参数 days,则 cookie 将在该天后过期。

          警告:没有错误检查,所以如果在调用时省略了强制参数,或者参数输入错误,函数会抛出错误。

          spu_createCookie = (name, value, days) => { document.cookie = `${name}=${value}; expires=${new Date(Date.now() + (days ? 86400000 * days : 7200000)).toGMTString()}; path=/` }
          

          相关JavaScript语法概念:

          1. Arrow Functions

          箭头函数表达式是传统函数表达式的紧凑替代方案,但受到限制且不能在所有情况下使用。

          1. Template Literals

          模板文字是允许嵌入表达式的字符串文字。您可以使用多行字符串和字符串插值功能。

          1. Ternary Operators

          条件(三元)运算符是唯一一个接受三个操作数的 JavaScript 运算符...该运算符经常用作 if 语句的快捷方式。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-17
            • 1970-01-01
            • 2017-01-11
            相关资源
            最近更新 更多