2012-01-30 49 views
7

¿Es posible probar si una cookie javascript ha caducado usando?cómo probar si una cookie javascript ha expirado?

Tengo que hacer algunas cosas de manera condicional y dos de esas condiciones se superponen, por lo que si se puede probar si una cookie ha caducado, entonces me será más fácil hacer las cosas.

Estoy usando jquery-1.5.js y jquery.cookies.js plugin.

Gracias.

CÓDIGO

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

favor saltar, nos la muestran código relacionado con el que estás teniendo problemas. Podría ayudarnos a ayudarte. –

+1

¿Ha intentado cambiar 'expiresAt:' a 'expires:'? https://github.com/carhartl/jquery-cookie –

+0

@roXon: No, no lo hice. La documentación tenía 'expiresAt', así que lo usé. http://code.google.com/p/cookies/wiki/Documentation#Options_object muestra 'expiresAt'. – skip

Respuesta

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

O como esta usando operador ternario:

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

Si va a hacer lo contrario (ver si todavía existe) :

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

Pero la cookie que ha expirado tiene un valor no nulo. Veo que tiene un valor con el que lo configuré, pero ha expirado como con el tiempo que configuré para que expire. Ahora que el usuario ha firmado, se ha ido, el navegador se ha cerrado y esa cookie vencida está allí. Will 'if ($ .cookie ('yourCookie') == null)' ¿todavía funciona en ese caso? – skip

+0

Tengo pequeños problemas para entender su inglés y sus pensamientos. ¿Desea que el usuario cierre sesión para eliminar la cookie? –

+0

@skip ¿podría agregar el código relacionado a su pregunta? –

1

Un navegador eliminará automáticamente cualquier cookie una vez que caduque, por lo que todo lo que necesita hacer es verificar si la cookie existe o no.

+1

El navegador no lo ha hecho y ese es el problema. Su Mozilla Firefox estoy usando y no he cambiado ninguna configuración. – skip

1

Si dice que el navegador no eliminó la cookie, es probable que sea porque su zona horaria es diferente de la UTC.

1

Para probar, por favor escribe a continuación el código 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> 

Entre más abajo el código de 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); 

comprobarlo en jsfiddle

Cuestiones relacionadas