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 に答える