使用jQuery检查Cookie是否存在,如果不存在则创建它。

42

我无法让这段代码起作用,肯定是我漏掉了什么非常简单的东西。我试图检查Cookie是否存在,如果存在{什么也不做},如果不存在{创建它}。我通过在页面上包含警报来测试Cookie。基本上,我不希望Cookie在带有引荐URL的情况下不断重新创建,我正在尝试仅获取第一个引荐URL。

$(document).ready(function(){   
  if ($.cookie('bas_referral') == null ){
   var ref = document.referrer.toLowerCase();  
   // set cookie  
   var cookURL =  $.cookie('bas_referral', ref, { expires: 1 }); 
  } 
 });  

显示当前cookie内容:

    // get cookie  
    alert($.cookie('bas_referral'));  

    // delete cookie  
     $.cookie('bas_referral', null);

看起来运行得很好:http://jsfiddle.net/niklasvh/wxFvG/。你的页面是否已经包含了`$.cookie`插件源代码? - Niklas
您是通过HTTP打开页面的吗?(因此不是从本地磁盘文件系统中打开)您使用了哪个Cookie插件?过期时间单位是什么?秒?所以,它会在1秒后过期? - BalusC
我正在使用jquery.cookie.js插件,并且我的警报显示了我之前所在的URL,因此我相信cookie已被创建。然而,如果我去网站上的不同页面,显示cookie URL的警报将会发生变化,这是不应该出现的,因为我设置了一个IF语句。 - ToddN
5个回答

87

我认为最保险的方式是:

if (typeof $.cookie('token') === 'undefined'){
 //no cookie
} else {
 //have cookie
}

检查空、空字符串或未定义变量的类型始终返回'undefined'

编辑:你甚至可以更轻松地到达那里:

if (!!$.cookie('token')) {
 // have cookie
} else {
 // no cookie
}

!! 将把 falsy 转换为 false。请记住,这将把 0 转换成 false!


2
警告:如Dan在下面的评论中所述,typeof null === 'object'。 - Jan Żankowski
这是给定问题的正确答案,@foo!当我测试代码时,真假上下文是相反的:if (!!$.cookie('token')) { // 有 cookie } else { // 没有 cookie } - yesfabime
1
哇!它检查了null、空和未定义!之前不知道还有一种更简洁的方式来检查这三个条件。不错! - Lyka
1
@foo,较短的答案对我不起作用。至少对我来说,它显示的与答案相反! - Paul Fitzgerald
请将以下代码添加到您的头部,以确保其正常工作:<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> - Teo Mihaila
显示剩余4条评论

26
 $(document).ready(function() {

     var CookieSet = $.cookie('cookietitle', 'yourvalue');

     if (CookieSet == null) {
          // Do Nothing
     }
     if (jQuery.cookie('cookietitle')) {
          // Reactions
     }
 });

2
我不知道为什么,但这正在设置一个 cookie,而不是检查是否存在一个,非常奇怪! - luke_mclachlan
变量CookieSet = $.cookie('cookietitle', 'yourvalue'); 在我的电脑上不起作用,可能的原因是什么?尽管我使用的是jquery 1.9.1库。 - Bengi Besçeli
1
嗯,我找到原因了;我没有从GitHub安装插件,我意识到这是一个本地函数。阅读此内容的人应该从(感谢@Kazar)下载插件:https://github.com/carhartl/jquery-cookie - Bengi Besçeli

9
我遇到了很多麻烦,因为我使用了以下内容:
if($.cookie('token') === null || $.cookie('token') === "")
{
      //no cookie
}
else
{
     //have cookie
}

无论我设置了什么样的cookie,上述代码始终返回false。通过我的测试,似乎在设置此对象之前它是未定义的。因此,将以下代码添加到我的程序中可以解决这个问题。

if($.cookie('token') === null || $.cookie('token') === "" 
    || $.(cookie('token') === "null" || $.cookie('token') === undefined)
{
      //no cookie
}
else
{
     //have cookie
}

2
您可以在检查是否存在值后设置cookie。
 $(document).ready(function(){            
      if ($.cookie('cookie')) { //if cookie isset
         //do stuff here like hide a popup when cookie isset
         //document.getElementById("hideElement").style.display = "none";
      }else{
         var CookieSet = $.cookie('cookie', 'value'); //set cookie
      }       
 });

1
尝试这个非常简单:

            var cookieExist = $.cookie("status");
            if(cookieExist == "null" ){
                alert("Cookie Is Null");

            }

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