2012-01-30 6 views
7

E 'possibile verificare se un cookie javascript è scaduto utilizzando?come testare se un cookie javascript è scaduto?

Ho bisogno di fare alcune cose in modo condizionale e due di queste condizioni sono sovrapposte per le quali, se si potesse verificare se un cookie è scaduto, sarà più facile per me fare le cose.

Sto utilizzando il plug-in jquery-1.5.js e jquery.cookies.js.

Grazie.

CODICE

var jq = jQuery.noConflict(); 
jq(document).ready(function() { 

    var timeStart, timeSubmit, timeLeft; 
    timeSubmit = 5 * 60 * 1000; 
    timeStart = jaaulde.utils.cookies.get("_watchman"); 
    try { 
     if(jaaulde.utils.cookies.test()) { 
      throw "err1"; 
     } 
     else if(hasCookieExpired) { 
      throw "err2"; 
     } 
     else if(!timeStart) { 
      jaaulde.utils.cookies.set("_watchman", String(new Date().getTime()), {path: '/path', expiresAt: new Date((new Date().getTime() + timeSubmit))}); 
      timeLeft = timeSubmit - (new Date().getTime() - Number(jaaulde.utils.cookies.get("_watchman"))); 
      timeCheck(); 
     } 
     else { 
      timeLeft = timeSubmit - (new Date().getTime() - Number(jaaulde.utils.cookies.get("_tts")));   

      timeCheck(); 
     } 

    } catch(err) { 
     //handle errors 
    } 

    function timeCheck() { 
      if(timeLeft <= 0) { 
       triggerSubmit(); 
      } 
      else { 
       setTimeout(triggerSubmit, timeLeft);  
       setInterval(showTimeLeft, 1000); 
      }  
    } 

    function triggerSubmit() { 
     //submit it 
    } 

    function showTimeLeft() { 
     //do something 
    } 

}); 
+0

Ignorare, noi lo spettacolo codice correlato con cui stai riscontrando problemi. Potrebbe aiutarci ad aiutarti. –

+1

Hai provato a cambiare 'expiresAt:' a 'expires:'? https://github.com/carhartl/jquery-cookie –

+0

@roXon: No, non l'ho fatto. La documentazione era 'expiresAt' quindi l'ho usata. http://code.google.com/p/cookies/wiki/Documentation#Options_object mostra "expiresAt'. – skip

risposta

5
if($.cookie('yourCookie') === null) { // if expired/non-existent 
    //DO SOMETHING 
} else { 
    // DO SOMETHING ELSE 
} 

O come questo usando Ternario operatore:

checkCookie = $.cookie('yourCookie') === null ? (/*IF TRUE...*/) : (/*IF FALSE...*/); 

Se avete intenzione di fare il contrario (vedi se è ancora esistente) :

if(!($.cookie('yourCookie') === null)) { // if NOT expired/still existent 
    //DO SOMETHING 
} else { 
    // DO SOMETHING ELSE 
} 
+0

Ma il cookie scaduto ha un valore non nullo. Vedo che ha un valore con cui l'ho impostato ma è scaduto come con il tempo che ho impostato affinché scada. Ora l'utente ha firmato, eliminato, il browser è stato chiuso e il cookie scaduto è presente. 'Se ($ .cookie ('yourCookie') == null)' funziona ancora in quel caso? – skip

+0

Ho dei piccoli problemi per capire il tuo inglese e i tuoi pensieri. Vuoi che l'utente firmi per eliminare il cookie? –

+0

@skip potresti aggiungere il codice correlato nella tua domanda? –

1

Un browser rimuoverà automaticamente qualsiasi cookie una volta scaduto, quindi tutto ciò che dovete fare è controllare se il cookie esiste o meno.

+1

Il browser non lo ha fatto ed è questo il problema. Il suo Mozilla Firefox sto usando e non ho cambiato nessuna impostazione. – skip

1

Se si dice che il browser non ha rimosso il cookie, è probabilmente perché il fuso orario è diverso da UTC.

1

Per provare, inserisci qui sotto il codice HTML

<label for="expsecs">Cookie expiration in seconds:</label> 
<input type="text" id="expsecs" value="5" /><br /> 
<button id="setcookie">set cookie</button> 
<button id="getcookie">get cookie</button> 
<div id="cookiestatus">status</div> 

Si prega di inserire sotto il codice jQuery

function set_cookie() { 
    var secs = parseInt($('#expsecs').val(), 10); 
    if (isNaN(secs)) { 
     secs = 5; 
    } 
    var now = new Date(); 
    var exp = new Date(now.getTime() + secs*1000); 
    var status = ''; 
    document.cookie = 'ExpirationCookieTest=1; expires='+exp.toUTCString(); 
    if (document.cookie && document.cookie.indexOf('ExpirationCookieTest=1') != -1) { 
     status = 'Cookie successfully set. Expiration in '+secs+' seconds'; 
    } else { 
     status = 'Cookie NOT set. Please make sure your browser is accepting cookies'; 
    } 

    $('#cookiestatus').text(status); 
} 

function get_cookie() { 
    var status = ''; 
    if (document.cookie && document.cookie.indexOf('ExpirationCookieTest=1') != -1) { 
     status = 'Cookie is present'; 
    } else { 
     status = 'Cookie is NOT present. It may be expired, or never set'; 
    } 
    $('#cookiestatus').text(status); 
} 

function init() { 
    $('#setcookie').bind('click', set_cookie); 
    $('#getcookie').bind('click', get_cookie); 
} 

$(init); 

controllare questo jsfiddle

Problemi correlati