Javascript document.cookie gibt immer eine leere Zeichenfolge zurück
Lesezeit: 5 Minuten
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
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
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:
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:
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.
tanmaygupta24
cookie funktioniert nicht, wenn Sie Ihre Datei direkt öffnen, sagen wir index.html
file:///C:/Users/me/Desktop/index.html
jedoch: Das Cookie funktioniert, wenn die Seite (index.html) mit einem leichten Server oder einem lokalen Server geöffnet wird
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