如果cookie存在,请检查cookie

检查cookie是否存在是一种好方法?

条件:

Cookie存在如果

cookie1=;cookie1=345534; //or cookie1=345534;cookie1=; //or cookie1=345534; 

Cookie不存在,如果

 cookie=; //or <blank> 

你可以用你想要的cookie的名字调用函数getCookie,然后检查它是否为null。

 function getCookie(name) { var dc = document.cookie; var prefix = name + "="; var begin = dc.indexOf("; " + prefix); if (begin == -1) { begin = dc.indexOf(prefix); if (begin != 0) return null; } else { begin += 2; var end = document.cookie.indexOf(";", begin); if (end == -1) { end = dc.length; } } // because unescape has been deprecated, replaced with decodeURI //return unescape(dc.substring(begin + prefix.length, end)); return decodeURI(dc.substring(begin + prefix.length, end)); } function doSomething() { var myCookie = getCookie("MyCookie"); if (myCookie == null) { // do cookie doesn't exist stuff; } else { // do cookie exists stuff } } 

我已经制作了一个非jQuery的替代版本:

 document.cookie.match(/^(.*;)?\s*MyCookie\s*=\s*[^;]+(.*)?$/) 

它只testingcookie的存在。 更复杂的版本也可以返回cookie值:

 value_or_null = (document.cookie.match(/^(?:.*;)?\s*MyCookie\s*=\s*([^;]+)(?:.*)?$/)||[,null])[1] 

把你的cookie名称代替MyCookie

 document.cookie.indexOf('cookie_name='); 

如果该cookie不存在,它将返回-1

ps只有它的缺点是(如评论中所提到的),如果有cookie被设置为这样的名称,将会出错: any_prefix_cookie_name

( 来源 )

如果你使用jQuery,你可以使用jquery.cookie插件 。

获取特定cookie的价值如下:

 $.cookie('MyCookie'); // Returns the cookie value 

regexObject。 testing (string)比string更快 。 匹配 (RegExp)。

MDN网站描述document.cookie的格式,并有一个示例正则expression式来抓取cookie( document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1"); )。 基于这一点,我会去这个:

 /^(.*;)?\s*cookie1\s*=/.test(document.cookie); 

这个问题似乎要求一个解决scheme,当cookie被设置时返回false,但是是空的。 在这种情况下:

 /^(.*;)?\s*cookie1\s*=\s*[^;]/.test(document.cookie); 

testing

 function cookieExists(input) {return /^(.*;)?\s*cookie1\s*=/.test(input);} function cookieExistsAndNotBlank(input) {return /^(.*;)?\s*cookie1\s*=\s*[^;]/.test(input);} var testCases = ['cookie1=;cookie1=345534;', 'cookie1=345534;cookie1=;', 'cookie1=345534;', ' cookie1 = 345534; ', 'cookie1=;', 'cookie123=345534;', 'cookie=345534;', '']; console.table(testCases.map(function(s){return {'Test String': s, 'cookieExists': cookieExists(s), 'cookieExistsAndNotBlank': cookieExistsAndNotBlank(s)}})); 

测试结果(Chrome 55.0.2883.87)

 function getCookie(name) { var dc = document.cookie; var prefix = name + "="; var begin = dc.indexOf("; " + prefix); if (begin == -1) { begin = dc.indexOf(prefix); if (begin != 0) return null; else{ var oneCookie = dc.indexOf(';', begin); if(oneCookie == -1){ var end = dc.length; }else{ var end = oneCookie; } return dc.substring(begin, end).replace(prefix,''); } } else { begin += 2; var end = document.cookie.indexOf(";", begin); if (end == -1) { end = dc.length; } var fixed = dc.substring(begin, end).replace(prefix,''); } // return decodeURI(dc.substring(begin + prefix.length, end)); return fixed; } 

尝试@jacfunction,遇到了一些麻烦,这是我如何编辑他的function。

如果你只是检查一个cookie的存在,为什么不…

如果(isset($ _ COOKIE ['mycookie'])){在这里做东西}

注意! select的答案包含一个错误(Jac的答案)。

如果您有多个cookie(非常可能),并且您检索的cookie是列表中的第一个,则不会将variables设置为“end”,因此它将返回“cookieName =“在document.cookiestring中!

这里是该函数的修改版本:

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