我的Javascript Cookie会话期满,而不是30天

时间:2012-04-24 20:38:13

标签: javascript jquery cookies

jQuery(document).ready(function(){
        if (document.cookie.indexOf('visited=true') === -1) {
            var expires = new Date();
            expires.setDate(expires.getDate()+30);
            document.cookie = "visited=true; path=/; expires="+expires.toUTCString();
            jQuery.colorbox({open:true,href:"<?=home_url()?>/popup/?site_type=2",iframe:true, innerWidth:"700px", innerHeight:"410px"});
        }                   
});

当我关闭浏览器时,此cookie会过期,但我希望它能持续30天,直到他们再次看到弹出窗口。

3 个答案:

答案 0 :(得分:4)

不要使用expires,请尝试max-age(以秒为单位)。这不涉及Date实例的创建和修改。

if (document.cookie.indexOf('visited=true') === -1) {
    document.cookie = "visited=true; path=/; max-age=2592000;";

答案 1 :(得分:1)

使用Cookie对象:

var CookieExpiryTime = {
    END_OF_SESSION : 0,
    SECOND : 1000,
    MINUTE : 1000 * 60,
    HOUR : 1000 * 60 * 60,
    DAY : 1000 * 60 * 60 * 24,
    YEAR : 1000 * 60 * 60 * 24 * 365,
    NEVER : 1000 * 60 * 60 * 24 * 365 * 20
}
var Cookie = {
    Set: function (n, v, time, path) {
        var e = '', d;
        if (time) {
            d = new Date();
            d.setTime(d.getTime() + (time));
            e = "; expires=" + d.toGMTString();
        }
        if (!path) path = "/";
        document.cookie = n + "=" + v + e + "; path="+path;
    },
    Get: function (n) {
        var match = n + "=", c = '', ca = document.cookie.split(';'), i;
        for (i = 0; i < ca.length; i++) {
            c=String(ca[i]).trim()
            if (c.indexOf(match) === 0) {
                return c.substring(match.length, c.length);
            }
        }
        return null;
    },
    Unset: function (n) {
        this.Set(n, "", -1);
    }
};

只需使用以下代码设置您的Cookie:

Cookie.Set("visited", "true", CookieExpiryTime.MONTH);

这很简单!

此外,要为您的日期添加30天,您必须这样做:

expires.setDate(expires.getDate()+30*24*60*60*1000);

因为时间是毫秒而不是几天。

答案 2 :(得分:-1)

可能的替代方法是使用html5 localStorage。它在IE8 +中得到支持,并且与会话没有任何关系,所以你不会有任何问题。如果您采用localStorage方法,可以使用以下方法构建代码。

var 30_DAYS = 1000 * 60 * 60 * 24 * 30;
var msgSent = localStorage.msgSent;
var now = new Date().getTime();
var diff = now - msgSent;
if (!msgSent || msgSent > 30_DAYS) {
  sendMsg();
}

function sendMsg() {
 // do your popup thing
 localStorage.msgSent = new Date.getTime();
}