Reputation: 12683
Is it possible to test if a javascript cookie has expired using?
I need to do a few thing conditionally and two of those conditions are overlapping for which if it could be tested whether a cookie has expired then it will be easier for me to get things done.
I am using jquery-1.5.js
and jquery.cookies.js
plugin.
Thanks.
CODE
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
}
});
Upvotes: 12
Views: 50585
Reputation: 206669
if( $.cookie('yourCookie') === null ) {
// EXPIRED
} else {
// DO SOMETHING ELSE
}
Or like this using Ternary operator:
$.cookie('yourCookie') === null ? /* EXPIRED */ : /* DO SOMETHING ELSE */;
https://github.com/carhartl/jquery-cookie (No longer maintained, archived)
https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
https://github.com/js-cookie/js-cookie
Upvotes: 10
Reputation: 639
To test, please enter below HTML code
<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>
Please enter below jQuery code
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);
Check this in jsfiddle
Upvotes: 2
Reputation: 53
If you say that the browser did not remove the cookie, it's probably because your time zone is different from UTC.
Upvotes: 4
Reputation: 438
A browser will automatically remove any cookie once it expires, so all you need to do is check whether the cookie exists or not.
Upvotes: 14