it-swarm.com.de

Javascript document.cookie immer leere Zeichenfolge

Ich habe dieses wirklich seltsame Problem mit clientseitigen Javascript-Einstellungs-Cookies. Im Moment entwickle ich 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 wird nur eine leere Zeichenfolge zurückgegeben. Ich habe die Chrome-Konsole aufgerufen, um zu sehen, ob ich dies durch direktes Ändern von document.cookie tun kann.

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

Wie kann ein Cookie über clientseitiges Javascript gesetzt werden?

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

30
Menztrual

Sie können keine Cookies setzen, wenn sie nicht auf einem Webserver ausgeführt werden.

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

jedoch:

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

41
Menztrual

Auf HttpOnly-Cookies kann nicht über Javascript zugegriffen werden, und Sitzungscookies werden normalerweise als HttpOnly-Cookies festgelegt. Siehe auch diese StackOverflow-Frage: So lesen Sie einen sicheren Cookie mit JavaScript

Prüfen Sie also, ob für den Cookie, den Sie lesen möchten, das Flag 'HttpOnly' gesetzt ist ... Wenn ja, kennen Sie den Täter. Es ist kein Fehler, es ist ein Feature!

49
Stijn de Witt

Dies funktionierte für mich, als ich von localhost lief und verchromt 28.0.1472.0 canary:

<!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 sie auf einem Server aus, besuchen Sie die Seite und schauen Sie in Ihren Cookie-Store, aktualisieren Sie die Seite und sehen Sie sich Ihre Konsole an.

Es wurde kein Cookie gesetzt, wenn es als Datei geöffnet wurde, es funktionierte jedoch jedes Mal, wenn es vom Server aus geöffnet wurde.

0
poida

Verwendung und Dokumente finden Sie hier:

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

Wenn Sie sich im Inkognito-Modus befinden oder Cookies deaktiviert haben, funktioniert dies nicht.

0
Aram Kocharyan