2012-04-24 1 views
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"}); 
     }     
}); 

このクッキーはブラウザをシャットダウンすると期限切れになりますが、ポップアップが再び表示されるまで30日間持続します。私のJavascriptのクッキーは30日間ではなくセッションで期限切れになります

+0

'jQuery'を長い形式で一度書く必要があることを知っていますか?あなたのコードを '(function($){....})(jQuery);'にラップすることによって、 'noConflict'が使われていても' $ 'を使うことができます。 DOM readyイベントを使用しているので、jQueryオブジェクトもこのイベントの関数に渡されます。つまり、 'jQuery(document).ready(function($){' – ThiefMaster

+0

http://stackoverflow.com/questions/6561687/this-code-i-have-with-x-days-with-x-days-a-set-a-set-a-cookie-exp-after – zod

+0

これはブラウザのCookie設定によって強制されるのでしょうか? –

答えて

4

代わりのexpiresを使用して、(秒)max-ageを試してみてください。これには、Dateインスタンスの作成および変更は含まれません。

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

私のブラウザであることが分かりましたが、これは良いことです答え、より簡単なコード、ありがとう:) –

-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(); 
} 
+0

彼の質問に答えることはできません... – ThiefMaster

+0

私は彼の目的をより良くするかもしれないと思う選択肢ですが、ちょっとした話題かもしれません。 –

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.Set("visited", "true", CookieExpiryTime.MONTH); 

また、あなたの日付に30日を追加するために、あなたはそうする必要があります:

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

時間はミリ秒単位ではなく日であることから。

+0

'.setDate()'で日付を変更するときは、ミリ秒ではなく、日を扱います。 – Pointy

関連する問題