检查 cookie 是否存在不起作用

8
我正在使用以下代码来检查是否存在一个具有特定值的cookie,然后执行某些操作。
$(document).ready(function() {
   if (document.cookie.indexOf('samplename=itsvalue')== -1 ) {
      alert("cookie");
   }
});

无论cookie是否存在,它总是显示警报。我在这里做错了什么?
2个回答

25

原始回答:

除非您有一个键为“samplename = itsvalue”的cookie,否则您的代码将始终计算为true。如果键是“samplename”,值是“itsvalue”,则应该像这样重写检查:

if (document.cookie.indexOf('samplename') == -1 ) {
  alert("cookie");
}

这将告诉您cookie并不存在。

要查看它是否存在:

if (document.cookie.indexOf('samplename') > -1 ) {
  alert("cookie exists");
}

更新以更好地回答这个问题:

你在那个检查中寻找的内容将始终评估为true并触发警报。将以下函数添加到您的js中并调用它以检查您的cookie是否存在。

function getCookie(name) {
    var cookie = document.cookie;
    var prefix = name + "=";
    var begin = cookie.indexOf("; " + prefix);
    if (begin == -1) {
        begin = cookie.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
        var end = document.cookie.indexOf(";", begin);
        if (end == -1) {
        end = cookie.length;
        }
    }
    return unescape(cookie.substring(begin + prefix.length, end));
} 

您可以使用以下方法检查您的Cookie:

var myCookie = getCookie("samplename");

if (myCookie == null) {
    alert("cookie does not exist");
} else {
    alert("cookie exists");
}

1
谢谢你的回答和更新!我非常感激。我测试了你之前的代码(在更新之前),它完美地工作了,所以再次感谢你。我将把这个作为已解决我的问题的答案。也许如果你把之前的代码再加上新的代码作为另一种解决方案,对于任何遇到同样问题的人来说都会很好。这是之前的代码 if (document.cookie.indexOf('samplename') > -1 ) { alert("cookie"); } 问候! - Mina Hafzalla
2
@JerryB 我会把之前的代码重新加回去。很高兴它对你有用。 - buzzsaw
dc is not defined - Francisco Corrales Morales

1
var cookies = document.cookie.split(';');//contains all the cookies
var cookieName = []; // to contain name of all the cookies

for(i=0;i<cookies.length;i++) {
    cookieName[i] = cookies[i].split('=')[0].trim();
}

    if(cookiesName.indexOf(cookieNameYouAreLookingFor)>-1) {
        console.log("EXISTS");
    } else {
        console.log("DOESN'T EXIST");
    }

将此代码粘贴到浏览器控制台中并检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接