Thomas Schmieder: session cookie handling

Beitrag lesen

Hallo Romy,

PHP ist ja eine Interpretersprache  und hat damit ein "Runtime-System" laufen. Dieses kümmert sich automatisch um diverse Dinge. Spätestestens durch den Scriptaufruf wird eine Instanz des Systems gestartet.

Beim Aufruf von session_start() sucht das System nach einem "Session-Cookie". Der Name des Cookies ist in der PHP-ini festgelegt (session.name). Man kann den Namen VOR dem Aufruf von session_start() durch session_name() explizit setzen. Ich tu das grundsätzlich und hole mir den Namen aus einer selbstdefinierten Konstanten, die in einer const.inc.php steht...

Wenn man eine (alte) Session zwangsweise wiederaufnehmen will (der Client wußte noch nichts von der Nummer), dann muss man einfach in das $_COOKIE-Array die Sessionnummer unter dem besagten Sessionnamen VOR Aufruf von session_start() hineinschreiben. Das (erneute) Setzen des Cookies auf dem Client muss man dann allerdings auch "zu Fuß" machen mit set_cookie().

Anderenfalls wird durch session_start() versucht, den passenden Cookie vom Client zu finden und den Startvorgang einzuleiten. Wenn kein Cookie vorhanden ist, dann würfelt PHP einen aus, legt eine passende Sessiondatei an und trägt den Cookie in den Header der Seite ein. Der wird dann an den Client geschickt.

Die Script-Shutdown-Funktion wird von session_start() automatisch eingetragen. Sie ist für das Sichern der Variablen am Scriptende verantwortlich. Sie sichert entweder die mit session_regsister() angemeldeten, oder die $HTTP_SESSION_VARS oder die $_SESSION. Es bleibt nur einer der drei Variablenbereiche erhalten. Die Priorität habe ich noch nicht getestet. Zur Zeit benutze ich immer noch $HTTP_SESSION_VARS, weil das bei den meisten Versionen noch klappt.

Grüße

Tom