按名称阅读javascript cookie

Jim*_*mbo 27 javascript cookies

我已经设置了一个cookie

document.cookie = 
    'MYBIGCOOKIE=' + value + 
    '; expires=' + now.toGMTString() + 
    '; path=/';
Run Code Online (Sandbox Code Playgroud)

现在这个网站上设置了5到10个cookie,有没有办法按名称检查这个cookie的值.

if (document.cookie.MYBIGCOOKIE == '1') {
    alert('it is 1')
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*tte 24

使用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');
Run Code Online (Sandbox Code Playgroud)


lon*_*day 16

不幸的是,Javascript的cookie语法远没有那么好.事实上,在我看来,它是设计最差的部分之一.

当您尝试阅读时document.cookie,您会得到一个包含所有Cookie集的字符串.你必须解析字符串,用分号;字符分隔.网络上有很多版本,而不是自己编写.我最喜欢的是quirksmode.org上的那个.这给了你createCookie,readCookiedeleteCookie功能.


uso*_*ban 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);
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

资料来源:W3Schools

编辑:如@ zcrar70所述,上面的代码不正确,请看下面的答案Javascript getCookie函数

  • 一般来说,[W3Schools可能不是一个很好的链接资源](http://w3fools.com/). (21认同)
  • @usoban我认为这对初学者来说是最糟糕的资源,因为那时他们学会做错事,然后变成难以处理的习惯. (3认同)

Dim*_*mos 6

您可以使用以下功能:

function getCookiesMap(cookiesString) {
  return cookiesString.split(";")
    .map(function(cookieString) {
        return cookieString.trim().split("=");
    })
    .reduce(function(acc, curr) {
        acc[curr[0]] = curr[1];
        return acc;
    }, {});
}
Run Code Online (Sandbox Code Playgroud)

当以document.cookie为参数调用时,它将返回一个对象,以 cookie 键为键和 cookie 值。

var cookies = getCookiesMap(document.cookie);
var cookieValue = cookies["MYBIGCOOKIE"];
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望上面的代码适用于值本质上包含等号的 cookie,则需要使用捕获括号 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String /split#Capturing_parentheses),即 split(/=(.+)/); (2认同)