6

プロトタイプを使用していますが、Cookie を設定または取得する組み込みの拡張機能が見つかりません。少しグーグルで調べた後、いくつかの異なる方法を見つけました。JavaScript で Cookie を取得するための最良の方法は何だと思いますか?

4

4 に答える 4

9

私はこのルーチンを使用します:

function ReadCookie(name)
{
  name += '=';
  var parts = document.cookie.split(/;\s*/);
  for (var i = 0; i < parts.length; i++)
  {
    var part = parts[i];
    if (part.indexOf(name) == 0)
      return part.substring(name.length)
  }
  return null;
}

非常にうまく機能します。

于 2008-10-07T20:30:02.897 に答える
2

アクセスする必要があるときはいつでも、document.cookieを使用します。基本的には、その記事で概説されている方法です。警告、私はプロトタイプを使用したことがないので、あなたが出くわしたことがないより簡単な方法があるかもしれません。

于 2008-09-25T20:32:56.073 に答える
2

他の誰かがそれを必要とする場合に備えて、私はDiodeus のコードを修正して、Cookie 値を取得しようとするときの部分一致に関するPhiLho の懸念に対処しました。

function getCookie(c_name) {
    var nameEQ = c_name + '=';
    var c_start = 0;
    var c_end = 0;
    if (document.cookie.substr(0, nameEQ.length) === nameEQ) {
        return document.cookie.substring(nameEQ.length, document.cookie.indexOf(';', nameEQ.length));
    } else {
        c_start = document.cookie.indexOf('; ' + nameEQ);
        if(c_start !== -1){
            c_start += nameEQ.length + 2;
            c_end = document.cookie.indexOf(';', c_start);
            if (c_end === -1) {c_end = document.cookie.length;}
            return document.cookie.substring(c_start, c_end);
        }
    }
    return null;
}

私は最近、同様に機能するはるかにコンパクトな RegExp も構築しました。

function getCookie(c_name){
    var ret = window.testCookie.match(new RegExp("(?:^|;)\\s*"+c_name+"=([^;]*)"));
    return (ret !== null ? ret[1] : null);
}

PhiLo、QuirksMode、およびこれら 2 つの実装のうち、上記の非 RegExp バージョン (indexOf の使用は非常に高速であり、大きな驚きではありません) が最速であることを示すいくつかの速度テストを行いました。http://jsperf.com/cookie-fetcher

于 2012-06-19T21:24:44.587 に答える
-2

これを使います。それは信頼できました:

function getCookie(c_name) {
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=")
  if (c_start!=-1)
    { 
    c_start=c_start + c_name.length+1 
    c_end=document.cookie.indexOf(";",c_start)
    if (c_end==-1) c_end=document.cookie.length
    return unescape(document.cookie.substring(c_start,c_end))
    } 
  }
return ""

}

于 2008-09-25T20:32:44.293 に答える