Javascript Cookie始终存在

时间:2014-03-20 01:34:34

标签: javascript cookies

我有一个页面,当点击链接时会创建一个cookie,因为cookie是使用从onclick事件调用的javascript函数创建的。我总是在页面上有另一个按钮,当点击检查天气时,cookie存在并且我遇到的问题是当我点击cookie创建者按钮时,cookie似乎总是存在。以下是我的功能

function createCookie(name,value,days) {
                if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";


    checkCookies();


}

function getCookie(cname)
{
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++)
  {
   var c = ca[i].trim();
    if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}

function checkCookies() {

    var cookie = getCookie("addon2");

    if (!cookie) {
    window.location.replace("http://google.com");
} else {
  window.location.replace("http://stackoverflow.com");
}


}

我的两个按钮如下;

 <a href="#" onclick='checkCookies();'>

<a href="#" onclick="createCookie('addon2', 'yes', 0);">

为什么每次单击第一个链接而不创建cookie时,我都会被重定向到堆栈溢出?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

  

为什么每次点击时都会被重定向到堆栈溢出   第一个链接没有创建cookie?

您正在重定向,因为Cookie已在浏览器中保留

点击第二个链接会创建一个没有过期的cookie。

因为您在致电days=0时设置了createCookie('addon2', 'yes', 0)

它导致始终调用else var expires = "";

要真正了解发生了什么。在Chrome中点击F12->资源然后选择Cookie。在这里,您将能够看到cookie的设置时间(并且看到它永不过期)。您也可以通过右键单击 - >删除

手动删除Cookie

如果您想让Cookie更快过期,以便您可以在几秒钟内看到效果,请尝试使用此变体。

function createCookie(name,value,seconds) { //<----Change days to seconds
            if (seconds) {//<----Change days to seconds
    var date = new Date();
    date.setTime(date.getTime()+(seconds*1000));//<----- change days to seconds and *24*60*60*1000 to just *1000
    var expires = "; expires="+date.toGMTString();
}

然后使用您的链接

<a href="#" onclick="createCookie('addon2', 'yes', 10);">Link</a> <!-- I set 10 seconds (Set whatever interval you like)

您可以添加此功能

function del_cookie(name)
{
  var date = new Date();
  date.setTime(date.getTime()+(-1));
  var expires = "; expires="+date.toGMTString();
  document.cookie = name+"=;"+expires+"; path=/";
}

此链接

<a href="#" onclick="del_cookie('addon2');">Delete Cookie</a>

因此,您可以通过VtoCorleone建议的链接使cookie过期

答案 1 :(得分:0)

您关闭浏览器然后重新打开它吗?如果您只是关闭选项卡,然后打开另一个选项卡,cookie可能会持续存在并仍然存在。

添加第3个按钮,通过将cookie设置为过去(昨天)的某个时间来完全删除cookie。这将确保完全删除cookie。然后再次尝试点击“checkCookies”链接,您应该被定向到google。