Ich muss alle Cookies vom Browser erhalten

105

Ich muss alle Cookies mithilfe von JavaScript in meinem Browser speichern. Wie geht das?

informatik01
quelle
5
Nayagi, wenn wir Ihre Frage beantworten, haben Sie leider eine Software, die nichts weniger als MALWARE ist.
Jon Limjap
18
@ Jon Limjap - das stimmt nicht ganz. Es gibt legitime Szenarien, um alle Cookies in einem Webbrowser ohne Malware aufzählen zu können.
Franci Penov
Whoa warte eine Sekunde. Alle Cookies? Logins von irgendeiner Website? Das ist Malware ...
Alexyorke
Ich habe eine Situation (Web-Apps hinter der Firewall für ein Unternehmen), in der dies praktisch und rechtmäßig wäre. Das Problem besteht jedoch darin, dass wir zu viele interne Domänen haben (hauptsächlich über virtuelle Hosts), sodass man argumentieren könnte, dass die Lösung die Verwendung von Single Sign On ist.
ClubbedAce

Antworten:

83

Sie können nur auf Cookies für eine bestimmte Site zugreifen. Mit document.cookiewird eine Liste von durch ein Semikolon getrennten Escape-Schlüssel-Wert-Paaren angezeigt.

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

Um den Zugriff zu vereinfachen, müssen Sie die Zeichenfolge analysieren und alle Einträge entfernen:

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;
}

So könnten Sie später schreiben:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"
Aemkei
quelle
5
Dies fängt das Leerzeichen nach dem Semikolon (";") nicht ein, sodass die Tasten vorne ein Leerzeichen haben ... use /; ? / beim Teilen, um sie zu entfernen?
Carter Cole
Schauen Sie sich diesen Ausschnitt zum Parsen an document.cookies(aus dem O'Reilly-Buch).
Bentley4
sollte wirklich .trim () zum Paar [0] hinzufügen, um sicherzustellen, dass keine führenden Leerzeichen vorhanden sind.
Andrew Killen
37
  1. Sie können keine Cookies für andere Websites sehen.
  2. Sie können keine HttpOnlyCookies sehen.
  3. Alle Cookies, die Sie sehen können, befinden sich in der document.cookieEigenschaft, die eine durch Semikolons getrennte Liste von name=valuePaaren enthält.
Franci Penov
quelle
27

Du kannst nicht. Aus Sicherheitsgründen können Sie nur auf die von Ihrer Website gesetzten Cookies zugreifen. StackOverflow kann weder die von UserVoice gesetzten noch die von Amazon gesetzten Cookies sehen.

PhiLho
quelle
5
Wie hat Facebook das gemacht ...? Ich habe immer gesehen, dass Facebook Anzeigen zeigt, die sich auf das beziehen, was ich von Google aus gesehen habe!
Ari
16
Tatsächlich pflanzt Facebook auf jeder Website seine eigenen Cookies ... über den Like-Button. Ich wette, Google macht dasselbe mit den + 1-Schaltflächen oder sogar mit den Site-Statistikskripten.
PhiLho
1
Danke ..., es öffnet meine Augen. Ich denke, dass jede Art von App, die mit ihnen zusammenhängt, funktioniert, einschließlich der Anmeldung mit der Social-Media-Konto-App.
Ari
2
@SoursopTree - Ist es nicht AdChoices? Facebook verwendet AdChoices, einen Google-Dienst, der Inhalte basierend auf Ihren Suchanfragen über Google anzeigt. Stackoverflow verwendet auch AdChoices. Ich bin vielleicht ein bisschen unzufrieden mit den genauen Details - aber ich denke, das ist es, woran Sie denken.
Rik
1
@KeepMove Wir nennen diese Terminologie Cookie-Synchronisierung
ericdemo07
12

Um alle Cookies für das aktuell im Browser geöffnete Dokument abzurufen, verwenden Sie die document.cookieEigenschaft erneut.

Codeslayer
quelle
4

Moderner Ansatz.

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

console.log(c);

;)

Prabu Samvel
quelle
2

Da im Titel nicht angegeben wurde, dass es programmgesteuert sein muss, gehe ich davon aus, dass es sich um ein echtes Debugging- / Datenschutzmanagementproblem handelt und die Lösung browserabhängig ist und einen Browser mit integrierter detaillierter Cookie-Verwaltungsgebühr und / oder einem Debugging-Modul oder benötigt ein Plug-In / eine Erweiterung. Ich werde einen auflisten und andere Leute bitten, sich in Browsern zu melden, die sie im Detail kennen, und bitte seien Sie präzise mit den Versionen.

Chrom, Eisen (SRWare Iron 4.0.280)

Das Menü des Schraubenschlüssels (Werkzeug): Optionen / Unter der Haube / [Cookies und Website-Berechtigungen anzeigen] Geben Sie für verwandte Domains / Websites das Suffix in das Suchfeld ein (z. B. .foo.tv). Vorsichtsmaßnahme: Wenn ein Knoten (Site oder Cookie) durch Klicken hervorgehoben ist, verwenden Sie nur [Entfernen], um bestimmte Teilbäume zu beenden. Wenn Sie [Alle entfernen] verwenden, werden weiterhin Cookies für alle durch Suchen ausgewählten Websites gelöscht und Ihre Debugging-Sitzung verschwendet.

ZXX
quelle
1

Trim () zum Schlüssel im Objekt hinzugefügt und benenne es str, damit klarer wird, dass es sich hier um string handelt.

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

Was Sie fragen, ist möglich; Das funktioniert aber nur in einem bestimmten Browser. Sie müssen eine Browser-Erweiterungs-App entwickeln, um dies zu erreichen. Sie können mehr über Chrome API lesen, um es besser zu verstehen. https://developer.chrome.com/extensions/cookies

Emeka Augustine
quelle