Golo Haas: Cookies setzen und lesen

Hi,

Cookies zu setzen und wieder zu lesen liest sich in der Literatur sehr einfach, allerdings habe ich heute satte fünf (!) Stunden gebraucht, um ein simples Cookie, in dem der Name des Users und dessen Emailadresse gespeichert werden, zu entwickeln.

Nach der Hilfe aus SelfHTML und meinem JavaScript-Buch versuchte ich es folgendermaßen (der Name sowie die Email werden vom User in ein Formular eingegeben):

document.cookie = "Name=" + escape(name) + "; expires=xyz; path=/; Email=" + escape(email) + "; expires=xyz; path=/";

xyz muss man halt durch ein Datumsobjekt ersetzen, steht hier nur der Übersichtlichkeit halber. "path=/" dient laut Dokumentation dazu, das Cookie auch außerhalb des aktuellen Verzeichnisses für alle Verzeichnisse des Servers verfügbar zu machen. Aber Pustekuchen!

Das Cookie enthielt nur die Zeile "Name=Golo%20Haas" und sonst nichts. Global lesbar war es auch nicht. Weder die Netscape- noch die MSDN-Dokumentation konnten mir weiterhelfen.

Ich habe dann mit zwei Admins vom SelfHTML-Chat versucht, das Problem zu lösen, ohne Erfolg. Weder ein entfernen der ";" und ersetzen durch " ", noch die Taktik, alle Werte in "" einzuschließen, brachten Erfolg.

Eben jedoch kam mir die rettende Idee: Man muss jeden Cookie einzeln schreiben! Teilt man obige Zeile auf in:

document.cookie = "Name=" + escape(name) + "; expires=xyz; path=/";
document.cookie = "Email=" + escape(email) + "; expires=xyz; path=/";

geht alles wie gewünscht, bloß steht das in KEINER Dokumentation.

Nur so als Tipp für alle, die auch an Cookies herumrätseln ...

Viel Erfolg,

Golo Haas

  1. Hi!

    document.cookie = "Name=" + escape(name) + "; expires=xyz; path=/";
    document.cookie = "Email=" + escape(email) + "; expires=xyz; path=/";

    geht alles wie gewünscht, bloß steht das in KEINER Dokumentation.

    Nun gut, es steht vielleicht nicht wirklich explizit da, aber die Syntaxbeschreibung des Set-Cookie-Headers auf http://developer.netscape.com/docs/manuals/js/client/jsref/cookies.htm zeigt imho deutlich, dass nach dem ersten Semikolon nur noch optionale Parameter folgen koennen, aber kein weiteres name/value-Paar.

    So long