获取Cookie的Javascript不会对某些值产生影响

时间:2012-05-19 11:02:09

标签: javascript cookies

我的PHP中有这个功能:

setcookie("UserPusser", $user, time() + 604800, "/pusser/beta/");
setcookie("PassPusser", $pass, time() + 604800, "/pusser/beta/");
setcookie("NotifPusser", $notif, time() + 604800, "/pusser/beta/");

我在javascript中有这个功能

function getThisCookie(name){
    var value;
    var singleCookie = document.cookie.split(";")
    for(var x in singleCookie){
        var y = singleCookie[x].split("=");
        if(y[0] == name) {
            value = y[1];
        }
    }
    return value;
}

当我输入alert(getThisCookie('UserPusser'))时,结果就是我想要的。但是当我尝试编写alert(getThisCookie('NotifPusser'));alert(getThisCookie('PassPusser'));时,结果为:undefined。

任何人都可以帮助我?

我要做的是让浏览器在每次页面重新加载时都记住复选框的值。

1 个答案:

答案 0 :(得分:0)

只是为了完整性,这里有一个完整的答案,而不仅仅是评论中的提示:

Cookie值以;分隔(分号+空格) 这会让你有这样的事情:

cookie = 'a=123; b=456; c=678'

为了将它们分开,你必须用相同的分隔符拆分它们。 使用现代浏览器(我认为JS 1.6+,现在还不太确定)或像underscore.js这样的库你也可以把它们放到一个对象中。

// if your browser supports 'reduce'
var cookieObject = document.cookie.split('; ').reduce(function(o, kvp) {
  var split_kvp = kvp.split('=');
  o[split_kvp[0]] = split_kvp[1];
  return o;
}, {});

// underscore.js version
var cookieObject = _.reduce(document.cookie.split('; '), function(o, kvp) {
  var split_kvp = kvp.split('=');
  o[split_kvp[0]] = split_kvp[1];
  return o;
}, {});

无论如何,在执行任何这些操作后,您可以轻松访问您要查找的值:

cookieObject.a == 123
cookieObject.b == 456

请记住,这些是 readOnly 。为了修改它们,您必须将对象写回document.cookie

// again, modern browser version
document.cookie = Object.keys(cookieObject).map(function(key) {
  return key + '=' + cookieObject[key];
}).join('; ');

// with underscore.js
document.cookie = _.chain(cookieObject).keys().map(function(key) {
  return key + '=' + cookieObject[key];
}).value().join('; ')