ブラウザからすべてのCookieを取得する必要があります


105

JavaScriptを使用してブラウザに保存されているすべてのCookieを取得する必要があります。どうすればできますか?


5
nayagi、残念ながら私たちがあなたの質問に答えるなら、あなたはマルウェアに他ならないソフトウェアを持っているでしょう。
Jon Limjap、2008年

18
@Jon Limjap-それは真実ではありません。マルウェアにならずにWebブラウザのすべてのCookieを列挙できる正当なシナリオがあります。
Franci Penov 2008年

ちょっと待って。すべてのクッキー?ログインはどのウェブサイトからですか?それはマルウェアです...
alexyorke 2011

私は、これを行うことが便利で非常に合法的な状況(企業のファイアウォールの背後にあるWebアプリ)を持っています。ただし、内部ドメインが多すぎる(主に仮想ホスト経由)ため、この問題が存在するため、シングルサインオンを使用することがソリューションであると主張できます。
ClubbedAce 2014年

回答:


83

特定のサイトのCookieにのみアクセスできます。を使用document.cookieすると、セミコロンで区切られたエスケープされたkey = valueペアのリストが表示されます。

secret=do%20not%20tell%you;last_visit=1225445171794

アクセスを簡略化するには、文字列を解析してすべてのエントリのエスケープを解除する必要があります。

var getCookies = function(){
  var pairs = document.cookie.split(";");
  var cookies = {};
  for (var i=0; i<pairs.length; i++){
    var pair = pairs[i].split("=");
    cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
  }
  return cookies;
}

後で書くかもしれません:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"

5
これはセミコロン( ";")の後のスペースをキャッチしないので、キーの前にスペースがあります... /を使用してください。?/それらを削除するために分割するとき?
Carter Cole

解析のためにこのスニペットをチェックしてくださいdocument.cookies(O'Reillyの本から)。
Bentley4 2013年

先頭のスペースがないことを確認するには、実際にpair [0]に.trim()を追加する必要があります。
Andrew Killen

37
  1. 他のサイトのCookieは表示されません。
  2. HttpOnlyクッキーが見えない。
  3. 表示されるすべてのCookie document.cookieは、セミコロンで区切られたname=valueペアのリストを含むプロパティにあります。

27

できません。設計上、セキュリティ上の理由から、サイトで設定されたCookieのみにアクセスできます。StackOverflowは、UserVoiceによって設定されたCookieも、Amazonによって設定されたCookieも表示できません。


5
Facebookはどうやってそれをしたのですか...?私はいつもFacebookがGoogleから閲覧したものに関連する広告を表示するのを見ました!
2015

16
実際、Facebookはすべてのサイトに独自のCookieを植えています... Likeボタンを使用しています。Googleが+1ボタンやサイト統計スクリプトについても同じことをしているに違いない。
PhiLho 2015

1
ありがとう、目が覚める。ソーシャルメディアアカウントアプリを使用したログインを含め、それらに関連するあらゆる種類のアプリで実行できると思います。
Ari

2
@SoursopTree-AdChoicesではありませんか?Facebookは、Googleでの検索に基づいてコンテンツを表示するGoogleサービスであるAdChoicesを使用しています。StackoverflowもAdChoicesを使用します。正確な詳細については少しずれているかもしれませんが、それはあなたが考えていることだと思います。
Rik

1
@KeepMoveこの用語をcookie同期
ericdemo07

12

ブラウザで開いている現在のドキュメントのすべてのCookieを取得するには、もう一度document.cookieプロパティを使用します。


4

現代的なアプローチ。

let c = document.cookie.split(";").reduce( (ac, cv, i) => Object.assign(ac, {[cv.split('=')[0]]: cv.split('=')[1]}), {});

console.log(c);

;)


2

タイトルはプログラマティックである必要があることを指定していなかったので、それは本物のデバッグ/プライバシー管理の問題であり、解決策はブラウザーに依存し、詳細なCookie管理料金やデバッグモジュールが組み込まれたブラウザーを必要とするか、プラグイン/拡張。そのうちの1つをリストにして、他の人に詳細を知っているブラウザに書き込むように依頼します。バージョンについては正確に説明してください。

Chromium、Ironビルド(SRWare Iron 4.0.280)

レンチ(ツール)メニュー:オプション/裏側/ [CookieとWebサイトのアクセス許可を表示]関連するドメイン/サイトの場合、検索ボックスにサフィックスを入力します(.foo.tvなど)。警告:ノード(サイトまたはCookie)がある場合、クリックして強調表示するだけで[削除]を使用して特定のサブツリーを削除します。[すべて削除]を使用しても、検索で選択されたすべてのサイトのCookieが削除され、デバッグセッションが無駄になります。


1

オブジェクトのキーにtrim()を追加し、strという名前を付けたため、ここで文字列を扱っていることがより明確になります。

export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.