Javascript document.cookie gibt immer eine leere Zeichenfolge zurück

Lesezeit: 5 Minuten

Benutzeravatar von Menztrual
Menztrual

Ich habe dieses wirklich seltsame Problem mit clientseitigen Javascript-Setting-Cookies. Ich entwickle gerade eine kleine 1-seitige Demo, um Cookies zu verwenden, um einige “Einstellungen” zu speichern. Bitte beachten Sie, dass ich keine serverseitige Sprache für diese Demo oder jQuery-Plugins von Drittanbietern verwenden kann.

Also habe ich ein Javascript-Objekt geschrieben, um ein Cookie zu setzen:

var cookie = {
  set: function (name,value,exdays) {

    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=name + "=" + value;
    console.log(document.cookie);
  }
}

cookie.set('foo','bar',2);
console.log(document.cookie);

Es gibt nur einen leeren String zurück. Ich bin in die Chrome-Konsole gegangen, um zu sehen, ob ich es durch direktes Ändern tun kann document.cookie

> document.cookie = "foo=bar";
"foo=bar"
> document.cookie
""

Wie setzen Sie ein Cookie über clientseitiges Javascript?

Bearbeiten: Ich bin nicht im Inkognito-Modus und Cookies sind aktiviert.

  • Siehe auch developer.mozilla.org/en-US/docs/DOM/document.cookie

    – Aram Kocharyan

    10. April 2013 um 0:13 Uhr

  • Habe ein ähnliches (aber nicht dasselbe) Problem. Wir können Cookies lesen und schreiben, nur nicht alle. Insbesondere das Sitzungscookie (JSESSIONID) kann nicht gelesen werden … Es sieht so aus, als wäre dies eine Sicherheitsfunktion, aber es ist schwierig, Informationen darüber zu finden … Weiß jemand davon?

    – Stijn de Witt

    15. August 2013 um 11:31 Uhr

  • @StijndeWitt: Das ist eine andere Frage, bitte stellen Sie sie alleine, anstatt ein Kopfgeld hinzuzufügen. Übrigens, die Antwort ist wahrscheinlich http-only Kekse

    – Bergi

    15. August 2013 um 12:14 Uhr

Benutzeravatar von Stijn de Witt
Stijn de Witt

Auf HttpOnly-Cookies kann nicht über Javascript zugegriffen werden, und Sitzungscookies werden normalerweise als HttpOnly-Cookies gesetzt. Siehe auch diese StackOverflow-Frage: How to read a secure cookie using JavaScript

Also… prüfen Sie, ob bei dem Cookie, den Sie auslesen möchten, das ‘HttpOnly’-Flag gesetzt ist… Wenn ja, kennen Sie den Übeltäter. Es ist kein Fehler, es ist ein Feature!

  • Es ist mir ein Rätsel, warum “Antwort” so viele positive Stimmen erhalten hat, da es unmöglich ist, HttpOnly auf einem in Javascript geschriebenen Cookie festzulegen.

    – Keine Idee für Namen

    5. Juli 2016 um 12:17 Uhr

  • Titel: Javascript document.cookie always empty string. Antwort: Kann passieren, wenn nur Cookies mit dabei sind HttpOnly Flagge gesetzt. Nein, das kannst du nicht schreiben diese Cookies von JS, aber Sie können versuchen zu Lesen Sie Cookies von JS und es wird zurückgegeben … leerer String … obwohl Sie das Cookie in den HTTP-Headern und im Browser-Inspektor sehen, erlaubt JS Ihnen nicht, es zu lesen.

    – Stijn de Witt

    5. Juli 2016 um 18:53 Uhr

  • Ich denke, es hat Upvotes bekommen, weil: 1) Leute versuchen tatsächlich oft, zB den Session-Cookie von JS auszulesen. 2) Als Ergebnis erhalten sie einen leeren String. 3) Sie googeln und kommen hierher. 4) Sie sehen diese Antwort und verdammt noch mal, genau das passiert. 5) Danke Mann +1. 🙂

    – Stijn de Witt

    5. Juli 2016 um 18:55 Uhr

  • Nun, das ist schade, denn die Antwort beantwortet nicht die FRAGE, die eindeutig für das Schreiben von Cookies in js ist

    – Keine Idee für Namen

    5. Juli 2016 um 20:30 Uhr

  • Was ist, wenn der Keks ist nicht Nur HTTP. Gibt es eine andere Ursache für dieses Problem?

    – Alayor

    2. August 2017 um 17:01 Uhr

So wie es aussieht, können Sie keine Cookies setzen, wenn sie nicht auf einem Webserver laufen.

file:///C:/Users/me/Desktop/demo/demo.html

jedoch:

http://localhost/demo/demo.html funktioniert.

  • Das hat mich ein paar Mal erwischt, bevor ich es wusste.

    – Jordan Grey

    20. August 2013 um 10:38 Uhr

  • Tatsächlich funktionieren Cookies nicht richtig mit localhost, benötigen Sie eine “gültige” Domain, auch wenn es die IP ist, wie zum Beispiel 127.0.0.1 oder 0.0.0.0. überprüfen Sie stackoverflow.com/questions/1134290/…

    – Felipe Sabino

    21. August 2013 um 2:31 Uhr


  • Es hat mich auch ziemlich verwirrt und in den meisten Tutorials denken sie, dass wir es irgendwie wissen sollten

    – Все Едно

    13. Juni 2017 um 14:42 Uhr

  • Tatsächlich erlaubt Firefox, dass die Cookies von einer Dateiseite gelesen werden. Chrome und IE nicht

    – NicolasZ

    1. September 2018 um 19:28 Uhr


  • Für Python-Benutzer können Sie in das Arbeitsverzeichnis wechseln, in dem sich die Dateien befinden, und dann den Befehl ausführen: python3 -m http.server.

    – Karson

    8. Juni 2020 um 5:48 Uhr

Dies funktionierte bei mir, als es von localhost ausgeführt wurde und Chrome 28.0.1472.0 Canary ausführte:

<!DOCTYPE html>
<html>
<head>
  <title>localhost cookie</title>
</head>
<body>
  <script type="text/javascript">
    console.log(document.cookie);
    var myCookie = "mycookie=hellocookie";
    document.cookie = myCookie;
  </script>
</body>
</html>

Führen Sie es auf einem Server aus, besuchen Sie die Seite und sehen Sie sich Ihren Cookie-Speicher an, aktualisieren Sie die Seite und sehen Sie sich Ihre Konsole an.

Es hat beim Öffnen als Datei kein Cookie gesetzt, funktionierte aber jedes Mal, wenn es vom Server geöffnet wurde.

Informationen zur Verwendung und Dokumentation finden Sie hier:

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

Wenn Sie dabei sind Inkognito-Modus oder Cookies deaktiviert haben, wird es nicht funktionieren.

Möglicherweise haben Sie einen falschen Pfad für das Cookie festgelegt.

In meinem Fall würde ich die einstellen path im Cookie zu /foo weil die Anwendung normalerweise auf Adresse ist http://example.org/foo. Während der Tests hatte ich die Anwendung jedoch unter der Standardadresse geöffnet http://localhost:3000 wodurch ich Cookies mit dem Pfad erstellen konnte /foo aber nicht lesen. Die Lösung bestand darin, die Anwendung auf Adresse zu testen http://localhost:3000/foo.

Benutzeravatar von tanmaygupta24
tanmaygupta24

  1. cookie funktioniert nicht, wenn Sie Ihre Datei direkt öffnen, sagen wir index.html

    file:///C:/Users/me/Desktop/index.html

  2. jedoch: Das Cookie funktioniert, wenn die Seite (index.html) mit einem leichten Server oder einem lokalen Server geöffnet wird

    http://localhost/demo/demo.html funktioniert. oder
    http://127.0.0.1:5500/temp6.html

  3. Für Live-Server in VS Code können Sie Live Serve von Ritwick Dey verwenden
    Geben Sie hier die Bildbeschreibung ein

1438490cookie-checkJavascript document.cookie gibt immer eine leere Zeichenfolge zurück

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy