0

2 つの変数で構成される Cookie があります。変数 #2 (最後の変数) から値を取得したいのですが、それを処理する方法がわかりません。

PHPから

私はこのようにクッキーを設定しました:

 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 行だけで作業は完了です!!!

狂ったようにクッキーを作成 - 取得 - 削除し、プラグインは他のパッケージのように大きなファイルではありません。

そして、このプラグインのおかげで、今では狂ったようにクッキーを使い始めています :)

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」の前に追加のスペースが 1 つ見つかりました。コンソールを使用して各ステップの結果をログに記録すると、そのような小さな問題を見つけるのに役立ちます。

  • 最初に「,」で分割
  • ループして「=」で分割
  • 「=」の右側のエスケープ値
  • 次に、あなたの場合、ループして「&」で分割します

このルーチンはあなたのために働くはずです ([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 に答える