Frage zu PHP Session
Klaus
- php
Hallo,
in einem PHP Script starte ich eine Session, die Session ID wird in einem Cookie abgelegt.
Was passiert aber, wenn von anderer Seite (z.B. Javascript) schon ein Cookie gesetzt ist, z.B. Artikel=12345, wird das dann von der SessionID überschrieben, oder hängt PHP das zusätzlich ans Cookie an.
Danke
Klaus
Was passiert aber, wenn von anderer Seite (z.B. Javascript) schon ein Cookie gesetzt ist, z.B. Artikel=12345, wird das dann von der SessionID überschrieben, oder hängt PHP das zusätzlich ans Cookie an.
Cookies haben Namen. Überlege mal, warum :)
Und verwechsle nicht den Inhalt eines Cookies mit seinem Namen. Bei Javascript ist die Unterstüzung für Cookies eine Katastrophe; die Schreibweise
document.cookie = "Zeitstempel=bla";
hat nichts mit der PHP-Schreibweise
setcookie("MeinCookie", "Zeitstempel=bla");
zu tun. Bei Javascript wird ein Cookie namens "Zeitstempel" mit Inhalt "bla" gesetzt, bei PHP hingegen ein Cookie namens "MeinCookie" mit Inhalt "Zeitstempel=bla". Das sind zwei Paar Schuhe.
Leider blicke ich immer noch nicht durch:
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.
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.
Wie kann ich das umgehen? Wie kann ich erreichen, dass wert2=1234 für das Dokument im Cookie gemerkt wird?
Danke
Klaus
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.