4
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 天,直到他们再次看到弹出窗口。

4

3 回答 3

5

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

if (document.cookie.indexOf('visited=true') === -1) {
    document.cookie = "visited=true; path=/; max-age=2592000;";
于 2012-04-24T20:43:02.583 回答
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);

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

于 2012-04-24T20:52:41.987 回答
0

一种可能的替代方法是使用 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();
}
于 2012-04-24T20:42:10.533 回答