1

Cookieを保存する機能があります

    cookievalue= escape(document.passwordCheck.oldPassword.value) + ";";
    document.cookie="oldCookie=" + cookievalue
    cookievalue= escape(document.passwordCheck.oldPassword.value) + ";";
    document.cookie="newCookie=" + cookievalue

oldCookie と newCookie のデータを取得するにはどうすればよいですか?

4

3 に答える 3

4

W3CSchool の機能が間違っています。次のような同じサフィックスを持つ複数の Cookie がある場合、失敗します。

ffoo=bar; foo=baz

検索すると、 fooではなくffoofooの値が返されます。

ここで私がすべきことは次のとおりです。まず、Cookie の転送方法の構文を理解する必要があります。Netscape の元の仕様 (このような haxx.seのようなコピーしか入手できません) では、セミコロンを使用して複数の Cookie を区切りますが、各名前/値のペアには次の構文があります。

NAME =VALUE
この文字列は、セミコロン、コンマ、空白を除く一連の文字です。このようなデータを名前または値に配置する必要がある場合は、URL スタイル エンコーディングなどのエンコーディング メソッド%XXが推奨されますが、エンコーディングは定義されていないか、必須ではありません。

したがってdocument.cookie、セミコロンまたはコンマで文字列を分割することは実行可能なオプションです。

それに加えて、RFC 2109では、Cookie をセミコロンまたはコンマで区切ることも指定されています。

cookie          =       "Cookie:" cookie-version
                        1*((";" | ",") cookie-value)
cookie-value    =       NAME "=" VALUE [";" path] [";" domain]
cookie-version  =       "$Version" "=" value
NAME            =       attr
VALUE           =       value
path            =       "$Path" "=" value
domain          =       "$Domain" "=" value

どちらも使用できますが、HTTP のリスト アイテムのデフォルトの区切り文字であるため、コンマを使用することをお勧めします。

;注: 下位互換性のために、Cookie ヘッダーの区切り文字はどこでもセミコロン ( ) です。,サーバーは、将来の互換性のために、Cookie 値間の区切り文字としてカンマ ( ) も受け入れる必要があります。

さらに、 RFC 2616で指定されているように、 VALUEは引用符で囲まれた文字列にすることもできるため、名前と値のペアにはさらにいくつかの制限があります。

attr        =     token
value       =     token | quoted-string

したがって、これら 2 つの Cookie バージョンは別々に処理する必要があります。

if (typeof String.prototype.trimLeft !== "function") {
    String.prototype.trimLeft = function() {
        return this.replace(/^\s+/, "");
    };
}
if (typeof String.prototype.trimRight !== "function") {
    String.prototype.trimRight = function() {
        return this.replace(/\s+$/, "");
    };
}
if (typeof Array.prototype.map !== "function") {
    Array.prototype.map = function(callback, thisArg) {
        for (var i=0, n=this.length, a=[]; i<n; i++) {
            if (i in this) a[i] = callback.call(thisArg, this[i]);
        }
        return a;
    };
}
function getCookies() {
    var c = document.cookie, v = 0, cookies = {};
    if (document.cookie.match(/^\s*\$Version=(?:"1"|1);\s*(.*)/)) {
        c = RegExp.$1;
        v = 1;
    }
    if (v === 0) {
        c.split(/[,;]/).map(function(cookie) {
            var parts = cookie.split(/=/, 2),
                name = decodeURIComponent(parts[0].trimLeft()),
                value = parts.length > 1 ? decodeURIComponent(parts[1].trimRight()) : null;
            cookies[name] = value;
        });
    } else {
        c.match(/(?:^|\s+)([!#$%&'*+\-.0-9A-Z^`a-z|~]+)=([!#$%&'*+\-.0-9A-Z^`a-z|~]*|"(?:[\x20-\x7E\x80\xFF]|\\[\x00-\x7F])*")(?=\s*[,;]|$)/g).map(function($0, $1) {
            var name = $0,
                value = $1.charAt(0) === '"'
                          ? $1.substr(1, -1).replace(/\\(.)/g, "$1")
                          : $1;
            cookies[name] = value;
        });
    }
    return cookies;
}
function getCookie(name) {
    return getCookies()[name];
}

出典: https://stackoverflow.com/a/4004010

于 2012-06-28T19:49:02.873 に答える
0

http://www.w3schools.com/js/js_cookies.aspから:

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);
        }
    }
}
于 2012-06-28T19:47:13.077 に答える
0

Cookie ライブラリまたはその他の関数を使用して値を取得します。

http://www.java2s.com/Code/JavaScript/Development/Cookiesetdeletegetvalueandcreate.htm

function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1) { endstr = document.cookie.length; }
  return unescape(document.cookie.substring(offset, endstr));
}

function getCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg) {
      return getCookieVal (j);
      }
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
    }
     return null;
  }
于 2012-06-28T19:48:22.937 に答える