Wie kann ich alle Cookies für die aktuelle Seite mit Javascript auflisten?

73

Gibt es eine Möglichkeit, mithilfe von Javascript alle mit der aktuellen Seite verknüpften Cookies aufzulisten? Das heißt, wenn ich die Namen der Cookies nicht kenne, aber alle darin enthaltenen Informationen abrufen möchte.

Speldosa
quelle
Bitte klären Sie, ob mit "bestimmte Seite" "die Seite gemeint ist, auf der sich der Benutzer gerade befindet". Die Antwort von DixonD ist genau richtig für Cookies auf der aktuellen Seite. Alle anderen Domänen sind aus Sicherheitsgründen Off-Limits.
Ben Zotto
1
Ja. Ich spreche von der Seite, auf der sich der Benutzer gerade befindet.
Speldosa
1
OK. Ich habe den Titel und die Frage bearbeitet, um dies widerzuspiegeln. Die Antwort von DixonD ist hier angemessen.
Ben Zotto
Beachten Sie, dass dies etwas ist, mit dem Sie wahrscheinlich tatsächlich deaktivieren möchten HttpOnly. Dies liegt daran, dass XSS-Angriffe dadurch viel weniger mächtig werden.
Flimm

Antworten:

90

Sie können Cookies für die aktuelle Domain auflisten:

function listCookies() {
    var theCookies = document.cookie.split(';');
    var aString = '';
    for (var i = 1 ; i <= theCookies.length; i++) {
        aString += i + ' ' + theCookies[i-1] + "\n";
    }
    return aString;
}

Aus Sicherheitsgründen können Sie jedoch keine Cookies für andere Domains auflisten

DixonD
quelle
1
Ich muss in meiner Beschreibung des Problems ungeschickt gewesen sein. Ich wollte eine Liste aller Cookies erhalten, die von HTML-Dokumenten im selben Katalog erstellt wurden. Im HTML-Dokument habe ich einfach den folgenden Code hinzugefügt: var x = document.cookie; window.alert (x); ... und ich konnte alle Cookies sehen, die ich erstellt hatte. Tut mir leid, wenn ich mich unklar ausgedrückt habe. Vielen Dank für all die schnellen Antworten. Ich mag diese Seite bereits :)
Speldosa
7
Auch dies funktioniert nicht, wenn der Cookie-Wert gesetzt wurde httpOnly=true.
Risto Novik
2
Schönere Ausgabe überaString += i + ' ' + decodeURIComponent(theCookies[i-1]) + "\n";
Mark Rajcok
15
var x = document.cookie; 
window.alert(x);

Dies zeigt jedes Cookie an, auf das die aktuelle Site Zugriff hat. Wenn Sie beispielsweise zwei Cookies "Benutzername = Frankenstein" und "Benutzername = Dracula" erstellt haben, wird in diesen beiden Codezeilen "Benutzername = Frankenstein; Benutzername = Dracula" angezeigt. Informationen wie das Ablaufdatum werden jedoch nicht angezeigt.

Speldosa
quelle
1
Dies funktioniert nicht, wenn Sie das Cookie mit gesetzt haben httpOnly, was empfohlen wird, da dies dazu beiträgt, die negativen Folgen eines XSS-Angriffs zu verringern.
Flimm
9

Viele Leute haben bereits erwähnt, dass document.cookieSie alle Cookies erhalten (außer http-onlydenen).

Ich werde nur einen Ausschnitt hinzufügen, um mit der Zeit Schritt zu halten.

document.cookie.split(';').reduce((cookies, cookie) => {
  const [ name, value ] = cookie.split('=').map(c => c.trim());
  cookies[name] = value;
  return cookies;
}, {});

Das Snippet gibt ein Objekt mit Cookie-Namen als Schlüssel mit Cookie-Werten als Werten zurück.

Etwas andere Syntax:

document.cookie.split(';').reduce((cookies, cookie) => {
  const [ name, value ] = cookie.split('=').map(c => c.trim());
  return { ...cookies, [name]: value };
}, {});
Jayant Bhawal
quelle
2

Um die Cookies auf einer bestimmten Seite schnell anzuzeigen, behalte ich eine Verknüpfung in der Favoritenleiste "Cookies" mit der URL:

javascript:window.alert(document.cookie.split(';').join(';\r\n'));
Paul Bishop
quelle
1

Nein.

Der einzige API-Browser, mit dem Sie Cookies verarbeiten können, besteht darin, sie über Schlüssel-Wert-Paare abzurufen und festzulegen. Alle Browser verarbeiten Cookies nur nach Domainnamen .

Der Zugriff auf alle Cookies für die aktuelle Domain erfolgt über document.cookie.

Yuval Adam
quelle
1
Dies funktioniert nicht, wenn Sie das Cookie mit httpOnly gesetzt haben, was empfohlen wird, da dies dazu beiträgt, die negativen Folgen eines XSS-Angriffs zu verringern.
Flimm
0

Nein, gibt es nicht. Sie können nur Informationen lesen, die der aktuellen Domain zugeordnet sind.

tur1ng
quelle
Verdammt :) Ok ... Folgefragen: 1. Gibt es eine Möglichkeit zu überprüfen, ob ein bestimmtes Cookie existiert (mit einem bestimmten Namen, den Sie kennen)? 2. Gibt es ein Handbuch für JavaScript, in dem beispielsweise die document.cookie-Klasse detailliert beschrieben wird?
Speldosa
Das denke ich auch. Ich möchte jedoch etwas Äquivalentes davon bekommen: download.oracle.com/javase/1.4.2/docs/api/overview-summary.html
Speldosa
0
function listCookies() {
    let cookies = document.cookie.split(';')
    cookies.map((cookie, n) => console.log(`${n}:`, decodeURIComponent(cookie)))
}

function findCookie(e) {
  let cookies = document.cookie.split(';')
  cookies.map((cookie, n) => cookie.includes(e) && console.log(decodeURIComponent(cookie), n))
}

Dies ist speziell für das Fenster, in dem Sie sich befinden. Es wurde versucht, es sauber und präzise zu halten.

Schneller
quelle
0

Einige Cookies, wie z. B. Referrer-URLs, enthalten =diese. Infolgedessen führt das einfache Aufteilen zu =unregelmäßigen Ergebnissen, und die vorherigen Antworten hier werden im Laufe der Zeit (oder sofort, abhängig von Ihrer Verwendungstiefe) zusammenbrechen.

Dies nimmt nur die erste Instanz des Gleichheitszeichens. Es gibt ein Objekt mit den Schlüsselwertpaaren des Cookies zurück.

// Returns an object of key value pairs for this page's cookies
function getPageCookies(){

    // cookie is a string containing a semicolon-separated list, this split puts it into an array
    var cookieArr = document.cookie.split(";");

    // This object will hold all of the key value pairs
    var cookieObj = {};

    // Iterate the array of flat cookies to get their key value pair
    for(var i = 0; i < cookieArr.length; i++){

        // Remove the standardized whitespace
        var cookieSeg = cookieArr[i].trim();

        // Index of the split between key and value
        var firstEq = cookieSeg.indexOf("=");

        // Assignments
        var name = cookieSeg.substr(0,firstEq);
        var value = cookieSeg.substr(firstEq+1);
        cookieObj[name] = value;
   }
   return cookieObj;
}
Travis J.
quelle