如何测试javascript cookie是否已过期?

如何测试javascript cookie是否已过期?,javascript,jquery,Javascript,Jquery,是否可以使用测试javascript cookie是否已过期 我需要有条件地做一些事情,其中两个条件是重叠的,如果可以测试cookie是否过期,那么我将更容易完成这些事情 我正在使用jquery-1.5.js和jquery.cookies.js插件 谢谢 代码 var jq = jQuery.noConflict(); jq(document).ready(function () { var timeStart, timeSubmit, timeLeft; timeSubmit

是否可以使用测试javascript cookie是否已过期

我需要有条件地做一些事情,其中两个条件是重叠的,如果可以测试cookie是否过期,那么我将更容易完成这些事情

我正在使用
jquery-1.5.js
jquery.cookies.js
插件

谢谢

代码

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
    }

});
var jq=jQuery.noConflict();
jq(文档).ready(函数(){
var timeStart、timeSubmit、timeLeft;
timeSubmit=5*60*1000;
timeStart=jaaulde.utils.cookies.get(“\u watchman”);
试一试{
if(jaaulde.utils.cookies.test()){
抛出“错误1”;
}
否则,如果(已过期){
抛出“错误2”;
}
如果(!timeStart),则为else{
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();
}
否则{
timeLeft=timeSubmit-(new Date().getTime()-Number(jaaulde.utils.cookies.get(“_tts”));
timeCheck();
}
}捕捉(错误){
//处理错误
}
函数timeCheck(){
如果(时间限制)
或者像这样使用三元运算符:


(不再维护、存档)


浏览器将在任何cookie过期后自动删除cookie,因此您只需检查cookie是否存在。

如果您说浏览器没有删除cookie,可能是因为您的时区与UTC不同。

要测试,请输入下面的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>
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);

中检查此项,但已过期的cookie确实有一个非空值。我看到它有一个我设置的值,但它已过期,与我设置的过期时间相同。现在用户已签名、离开,浏览器已关闭,但过期的cookie仍在。如果($.cookie('yourCookie')==null,则将
在这种情况下仍然有效?我很难理解你的英语和想法。你想在用户注销时删除cookie吗?@skip你可以在你的问题中添加相关代码吗?我设置了一个cookie,它的值和过期时间以及。有一个删除cookie的方法,但该方法可以dn未运行,因为用户刚刚注销。现在cookie已存在,并且计时器已打开。我需要测试该用户是在倒计时结束后出现,还是在倒计时仍在运行时出现,因为我需要以不同的方式处理这些情况。因此,如果我能够确定cookie是否已过期,我将能够轻松完成任务。而不必查看我可以建议您在注销操作中触发cookie删除的代码(我假设您使用“单击”操作)
$(“#注销”)。单击(函数(){$.cookie(“yourCookie”,null););
浏览器没有这样做,这就是问题所在。我正在使用的是Mozilla firefox,我没有更改任何设置。请跳过,向我们显示您遇到问题的相关代码。这可能会帮助我们帮助您。您是否尝试将
过期日期:
更改为
过期日期:
?@roXon:不,我没有。文档已经更改
expiresAt
所以我使用了它。显示
expiresAt
。不,cookie.js是Klaus Hartl写的,cookie.js是James Auldridge写的。我使用了第一个。从来没有出现过问题。但是我可以看到,您使用的那个有更多组件。空的cookie可能并不总是被删除/擦除(不记得我在哪里找到这个…)但它将相当未设置,据我所知,保留的数据在下一次cookie检索中将不相关。请确保在
'null'
中没有使用“”引号,因为这样您只需更改cookie数据以存储“null”文本/数据
<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>
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);