0

我有由 2 个变量组成的 cookie。我想从变量#2(最后一个)中获取值,但我不知道如何处理。

来自 PHP

我设置了这样的cookie:

 setcookie ('mysite'.$user_id,'user_id='. $user_id. '&msg_id='. $c_id, time() + $cookie_time);

我想要得到的是msg_id

在 JavaScript 中

var ca="mysite"+user_id;
    ca = new Array();
        ca = document.cookie.split(';');

        for (var w in ca)

        NmeVal  = new Array();
        NmeVal  = ca[w].split('=');

但是我怎样才能只得到msg_id我上面提到的值呢?

更新

我现在通过这样做让它工作:

var NmeVal  = new Array();

    NmeVal  = ca[w].split('=');

    var vl =unescape(NmeVal[1]);  

    var gala = vl.split('=');

    alert(gala[2]);

我得到了我想要的唯一值:: 它可以在 IE、FIrefox、Chrome 中使用

但为什么它在Safari中不起作用?

UPDATE # FINAL 最后我找到了解决方案 jquery.cookie.js 只有 3 行工作就完成了!!!

疯狂地创建 - 获取 - 删除 cookie,插件不像其他包那样大文件。

由于这个插件,我现在开始疯狂地使用 cookie :)

4

2 回答 2

0

您最好以这种方式将信息存储在 cookie 中:

setcookie("user_id", $user_id);
setcookie("msg_id", $c_id);
// ...

通过给出名称获取 cookie 值的 Javascript 函数:

var user_id = getCookie("user_id");

function getCookie(name) {
    var result = ""; 
    var myCookie = " " + document.cookie + ";";
    var searchName = " " + name + "=";
    var startOfCookie = myCookie.indexOf(searchName); 

    var endOfCookie; 
    if (startOfCookie != -1) {
        startOfCookie += searchName.length; 
        endOfCookie = myCookie.indexOf(";", startOfCookie); 
        result = unescape(myCookie.substring(startOfCookie, endOfCookie)); 
    }
    return result; 
}
于 2013-09-02T14:43:38.517 回答
0

解析 cookie 时,从外向内解析。

我在解析您发布的 cookie 时发现的一件事是“mysite”之前的额外空格。使用控制台并记录每个步骤的结果可以帮助您发现类似的小问题。

  • 先用 ',' 分割
  • 循环并按'='分割
  • '=' 右侧的转义值
  • 然后在你的情况下,循环并用'&'分割

这个例程应该适合你([Fiddle][5]):

// Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
if (!String.prototype.trim) {
    String.prototype.trim = function () {
        return this.replace(/^\s+|\s+$/g, '');
    };
}


function parseCookie(cookie) {
    var vals = cookie.split(',');
    var nameValue = {}, cur, mysite;

    for (var i = 0; i < vals.length; ++i) {
        cur = vals[i].split('=');
        nameValue[cur[0].trim()] = unescape(cur[1]);
    }

    mysite = nameValue.mysite.split('&');
    nameValue.mysite = {};
    for (i = 0; i < mysite.length; ++i) {
        cur = mysite[i].split('=');
        nameValue.mysite[cur[0].trim()] = cur[1];
    }

    return nameValue;
}

var cookie = "PHPSESSID=oleGInunYQIP7QSLpDUVR3, mysite=usr%3DChrome%26hash%3D594f803b380a41396ed63dca39503542";

console.log(JSON.stringify(parseCookie(cookie)));

结果:

{"PHPSESSID":"oleGInunYQIP7QSLpDUVR3","mysite":{"usr":"Chrome","hash":"594f803b380a41396ed63dca39503542"}}

您可以通过以下方式检索所需的任何值:

var usr = result.mysite.usr;
于 2013-09-02T16:42:42.660 回答