Ich muss alle Cookies vom Browser erhalten


105

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


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"

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.

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.


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.


4

Moderner Ansatz.

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

console.log(c);

;)


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.


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]}), {});


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.