2012-01-30 14 views
7

Czy można przetestować, czy plik cookie javascript wygasł?jak sprawdzić, czy plik cookie javascript wygasł?

Muszę zrobić kilka rzeczy warunkowo i dwa z tych warunków się pokrywają, dla których jeśli można by przetestować, czy ciasteczko wygasło, to łatwiej mi będzie załatwić sprawy.

Używam wtyczki jquery-1.5.js i jquery.cookies.js.

Dzięki.

KOD

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

Proszę pominąć, pokaż nam powiązany kod, z którym masz problemy. To może nam pomóc. –

+1

Czy próbowałeś zmienić 'expiresAt:' na 'expires:'? https://github.com/carhartl/jquery-cookie –

+0

@roXon: Nie, nie zrobiłem. Dokumentacja miała wartość 'expiresAt', więc użyłem tego. http://code.google.com/p/cookies/wiki/Documentation#Options_object pokazuje 'expiresAt'. – skip

Odpowiedz

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

Albo jak to przy użyciu trójskładnikowych operatora:

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

Jeśli planujesz zrobić odwrotnie (patrz, czy to nadal istnieje) :

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

. Jednak plik cookie, który wygasł, ma wartość inną niż null. Widzę, że ma wartość, z którą ją ustawiłem, ale wygasła, tak jak w przypadku, gdy ustawiam na wygaśnięcie. Teraz użytkownik podpisał, zniknął, przeglądarka została zamknięta, ale ten nieaktualny plik cookie już istnieje. Czy 'if ($ .cookie ('yourCookie') == null)' nadal działa w takim przypadku? – skip

+0

Mam małe problemy, aby zrozumieć twój angielski i twoje myśli. Chcesz, aby użytkownik wylogował się, aby usunąć plik cookie? –

+0

@skip Czy możesz dodać powiązany kod do swojego pytania? –

1

Przeglądarka automatycznie usunie plik cookie po jego wygaśnięciu, więc wszystko, co musisz zrobić, to sprawdzić, czy plik cookie istnieje.

+1

Przeglądarka tego nie zrobiła i na tym polega problem. Używa Firefoxa Mozilla i nie zmieniłem żadnych ustawień. – skip

1

Jeśli powiesz, że przeglądarka nie usunęła pliku cookie, prawdopodobnie wynika to z tego, że Twoja strefa czasowa różni się od czasu UTC.

1

Aby przetestować, wpisz poniżej kod 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> 

Wpisz poniżej kod 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); 

sprawdzić w jsfiddle

Powiązane problemy