Die allwissende Müllhalde: Cookies

Beitrag lesen

Wenn ich die PHP Session starte und alert(document.cookie) ausgebe, dann erscheint PHSession=bla

Schreibe ich jetzt
document.cookie = document.cookie+"wert2=1234"; funktioniert das auch.

Zum Setzen eines Cookies reicht in Javascript die einfache Zuweisung der Cookiebeschreibung an document.cookie; der alte Inhalt von document.cookie muß nicht nochmals eingefügt werden. Funktionsmäßig nicht nachvollziehbar, ist aber so.
Beim Auslesen von Cookies erhält man übrigens wiederum etwas anderes als vorher reingeschrieben wurde: Eine Zeichenkette mit _allen_ relevanten Cookies für die Seite, aber ohne die Verfallsdaten dazu.

Alles in allem enthält document.cookie also nicht ein einzelnes Cookie, wie der Name vielleicht suggeriert, sondern ist eine merkwürdige Schnittstelle zu allen Cookies.

Beachte auch, dass alle Cookiewerte in/aus document.cookie %-kodiert sein müssen (schreiben) bzw. %-kodiert sind (auslesen). Für diese Kodierung sind in Javascript die Funktion escape() und unescape() zuständig.

Dein Code oben müsste also korrekt folgendermaßen aussehen:

document.cookie = "wert2="+escape(wert);

(Nur zur Demonstration: wert ist hier eine Variable, die die Daten für Cookie wert2 enthält.)

Sobald ich aber am nächsten Tag das Programm wieder starte, ist wert2=1234 weg, der Start der PHPSession scheint also mein Cookie jedesmal komplett neu zu schreiben.

Nein. Cookies haben ein Verfallsdatum. Und haben sie keines, verschwinden sie, sobald der Browser geschlossen wird. Es ist also kein Wunder, dass Dein Javascript-Cookie am nächsten Tag nicht mehr da ist (es sei denn, Du lässt den Browser 24h am Tag offen).

Lies Dir http://de.selfhtml.org/javascript/objekte/document.htm#cookie nochmal genau durch, insbesondere den Teil, in dem "expires" erwähnt wird.