如果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)}}));
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, ''); }