在javascript中访问cookie

时间:2012-02-13 18:02:13

标签: javascript cookies

  

可能重复:
  Read cookie in javascript

我写了以下功能。我需要使用$COOKIE['cookieName']格式访问Cookie。

var $COOKIE = (function(){
    if(!document.cookie)
        return {};
    else{
        var c = document.cookie.split(';');
        var len = c.length;

        var ret = {};
        var temp ;

        for( var i = 0 ; i < len ; ++i )
        {
            temp = c[i].split('=');

            ret[temp[0]] = temp[1];
        }

        return ret;
    }
})();

我设置了两个Cookie a1 = 2,a2 = 9. $COOKIE['a1']给了我2,但$COOKIE['a2']未定义。

为什么会这样?我的逻辑/代码有什么问题?

3 个答案:

答案 0 :(得分:5)

问题是你被分裂了“;”但cookie中的值用“;”(分号+空格)分隔。因此,您的第二个值为" a2": 9

要修复它,只需在分隔符中添加一个空格,或者使用此代码段以实现更加以数据为中心的方法;)

var $COOKIE = (document.cookie || '').split(/;\s*/).reduce(function(re, c) {
  var tmp = c.match(/([^=]+)=(.*)/);
  if (tmp) re[tmp[1]] = unescape(tmp[2]);
  return re;
}, {});

答案 1 :(得分:1)

试试这个

function getCookie(c_name) {
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i += 1) {
        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));
        }
    }
}

答案 2 :(得分:1)

你有

 var len = a.length;

应该是

var len = c.length;

如果你想循环遍历cookie数组。 (注意'C'而不是'A')。这就是为什么你只得到第一个,因为它只循环一次。不是数组的实际长度