我使用
设置了一个cookiedocument.cookie =
'MYBIGCOOKIE=' + value +
'; expires=' + now.toGMTString() +
'; path=/';
现在这个网站上设置了5到10个cookie,有没有办法按名称检查这个cookie的值。
if (document.cookie.MYBIGCOOKIE == '1') {
alert('it is 1')
}
答案 0 :(得分:20)
使用RegExp构造函数和多个替换来阐明语法:
function getCook(cookiename)
{
// Get name followed by anything except a semicolon
var cookiestring=RegExp(""+cookiename+"[^;]+").exec(document.cookie);
// Return everything after the equal sign, or an empty string if the cookie name not found
return decodeURIComponent(!!cookiestring ? cookiestring.toString().replace(/^[^=]+./,"") : "");
}
//Sample usage
var cookieValue = getCook('MYBIGCOOKIE');
答案 1 :(得分:14)
不幸的是,Javascript的cookie语法远没有那么好。事实上,在我看来,它是设计最差的部分之一。
当您尝试阅读document.cookie
时,您会收到一个包含所有Cookie集的字符串。您必须解析字符串,用分号;
字符分隔。网络上有很多版本,而不是自己编写。我最喜欢的是the one at quirksmode.org。这会为您提供createCookie
,readCookie
和deleteCookie
个功能。
答案 2 :(得分:11)
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
}
来源:W3Schools
修改:如@ zcrar70所述,上述代码为 不正确 ,请参阅以下答案Javascript getCookie functions
答案 3 :(得分:3)
我觉得这个图书馆很有帮助。 3.128 kb的纯粹便利。
添加脚本
<script src="/path/to/jquery.cookie.js"></script>
设置Cookie
$.cookie('name', 'value');
读取cookie
$.cookie('name');
答案 4 :(得分:2)
Stack Overflow的目的是提供一个高质量答案的数据库,所以我将引用一些标准源代码和一篇提供示例的文章:
http://www.codelib.net/javascript/cookies.html
注意:代码是正则表达式,可大大提高效率。
使用提供的源代码,您可以使用以下cookie:
makeCookie('color', 'silver');
这会保存一个cookie,表明颜色是银色。 cookie将在当前会话之后到期(一旦用户退出浏览器)。
makeCookie('color', 'green', { domain: 'gardens.home.com' });
这会为gardens.home.com
保存绿色。
makeCookie('color', 'white', { domain: '.home.com', path: '/invoices' });
makeCookie('invoiceno', '0259876', { path: '/invoices', secure: true });
为在home.com任意位置查看的发票保存白色。第二个cookie是安全cookie,并记录发票号。此cookie将仅发送到通过安全HTTPS连接查看的页面,安全页面中的脚本是允许访问cookie的唯一脚本。
不允许一个HTTP主机存储或读取另一个HTTP主机的cookie。因此,cookie域必须至少存储两个句点。默认情况下,域与创建cookie的Web地址的域相同。
HTTP cookie的路径将其限制为HTTP主机上的某些文件。某些浏览器使用默认路径/
,因此cookie将在整个主机上可用。其他浏览器使用整个文件名。在这种情况下,如果/invoices/overdue.cgi
创建了Cookie,则只有/invoices/overdue.cgi
才能恢复Cookie。
设置路径和其他参数时,它们通常基于从location.href等变量获取的数据。这些字符串已经被转义,因此在创建cookie时,cookie函数不会再次转义这些值。只转义cookie的名称和值,因此我们可以方便地使用任意名称或值。某些浏览器会限制Cookie的总大小,或允许一个域保留的Cookie总数。
makeCookie('rememberemail', 'yes', { expires: 7 });
makeCookie('rememberlogin', 'yes', { expires: 1 });
makeCookie('allowentergrades', 'yes', { expires: 1/24 });
这些cookie将记住用户的电子邮件7天,用户登录1天,并允许用户在没有密码的情况下输入1小时(一天的第24天)的成绩。即使他们退出浏览器,即使他们没有退出浏览器,也会遵守这些时间限制。用户可以自由使用其他浏览器程序,也可以删除cookie。如果他们这样做,无论到期日期如何,cookie都将无效。
makeCookie('rememberlogin', 'yes', { expires: -1 });
删除cookie。 cookie值是多余的,返回值false表示删除成功。 (使用-1的到期而不是0.如果我们使用0,则cookie可能会被取消删除,直到超过当前时间一秒。在这种情况下,我们会认为删除不成功。)
显然,由于cookie可以通过这种方式删除,因此新的cookie也会覆盖具有相同名称的旧cookie的任何值,包括到期日期等。但是,完全不重叠的路径的cookie或者域是分开存储的,相同的名称不会相互干扰。但一般来说,任何有权访问cookie的路径或域都可以覆盖cookie,无论它是否改变了新cookie的路径或域。
rmCookie('rememberlogin');
还会通过makeCookie('rememberlogin', '', { expires: -1 })
删除Cookie。这使得cookie代码更长,但为使用它的人保存代码,从长远来看,人们可能认为可以节省更多代码。
答案 5 :(得分:2)
document.cookie="MYBIGCOOKIE=1";
您的Cookie看起来像:
"MYBIGCOOKIE=1; PHPSESSID=d76f00dvgrtea8f917f50db8c31cce9"
首先阅读所有cookies:
var read_cookies = document.cookie;
然后用“;”:
分割所有Cookievar split_read_cookie = read_cookies.split(";");
然后使用for循环读取每个值。进入循环,每个值再次用“=”:
分割for (i=0;i<split_read_cookie.length;i++){
var value=split_read_cookie[i];
value=value.split("=");
if(value[0]=="MYBIGCOOKIE" && value[1]=="1"){
alert('it is 1');
}
}
答案 6 :(得分:2)
最简单的方法之一是,但如前所述,如果有类似名称(MyCookie vs AnotherMyCookie),它可以返回错误的cookie:
var regex = /MyCookie=(.[^;]*)/ig;
var match = regex.exec(document.cookie);
var value = match[1];
我在Chrome扩展程序中使用它,所以我知道我设置的名称, 我可以确保不会或多或少地重复。
答案 7 :(得分:1)
这是一个API,用于平滑令人讨厌的浏览器cookie“API”
答案 8 :(得分:1)
您可以使用以下功能:
var cookies = getCookiesMap(document.cookie);
var cookieValue = cookies["MYBIGCOOKIE"];
当使用 document.cookie 作为参数调用时,它将返回一个对象,其中cookie键作为键和cookie值。
aptitude[]
答案 9 :(得分:0)
这里是一个示例实现,它将使该过程变得无缝(从AngularJs借来)
var CookieReader = (function(){
var lastCookies = {};
var lastCookieString = '';
function safeGetCookie() {
try {
return document.cookie || '';
} catch (e) {
return '';
}
}
function safeDecodeURIComponent(str) {
try {
return decodeURIComponent(str);
} catch (e) {
return str;
}
}
function isUndefined(value) {
return typeof value === 'undefined';
}
return function () {
var cookieArray, cookie, i, index, name;
var currentCookieString = safeGetCookie();
if (currentCookieString !== lastCookieString) {
lastCookieString = currentCookieString;
cookieArray = lastCookieString.split('; ');
lastCookies = {};
for (i = 0; i < cookieArray.length; i++) {
cookie = cookieArray[i];
index = cookie.indexOf('=');
if (index > 0) { //ignore nameless cookies
name = safeDecodeURIComponent(cookie.substring(0, index));
if (isUndefined(lastCookies[name])) {
lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
}
}
}
}
return lastCookies;
};
})();
答案 10 :(得分:0)
我认为可以读取Cookie的最简单方法是使用Regexp,如下所示:
**将COOKIE_NAME
替换为您的cookie名称。
document.cookie.match(/COOKIE_NAME=([^;]*);/)[1]
它如何工作?
Cookie像这样存储在document.cookie
中:cookieName=cookieValue;cookieName2=cookieValue2;.....
正则表达式会在整个cookie字符串中搜索字面量"COOKIE_NAME="
并捕获其后不是分号的所有内容,直到它真正找到分号为止;
然后,我们使用[1]
从数组中获取第二个项目,即捕获的组。
答案 11 :(得分:0)
我用它来读取 cookie:
function getCookie (key) {
let value = ''
document.cookie.split(';').forEach((e)=>{
if(e.includes(key)) {
value = e.split('=')[1]
}
})
return value
}
let name = getCookie(name)