Die Unterstützung von Sessions in PHP bietet die Möglichkeit, bestimmte Daten während einer Folge von Aufrufen einer Website festzuhalten.
Einem Besucher wird beim Aufruf einer Website eine eindeutige ID, die sogenannte Session-ID, zugeordnet. Diese wird entweder benutzerseitig in einem Cookie abgelegt oder in der URL übermittelt.
Die Unterstützung von Sessions erlaubt es, Daten zwischen Anfragen im superglobalen Array $_SESSION zu speichern. Wenn ein Besucher eine Website aufruft, überprüft PHP automatisch (falls session.auto_start auf 1 gesetzt ist) oder auf Anfrage (explizit durch session_start()), ob mit der Anfrage schon eine bestimmte Session-ID gesendet wurde. Wenn dies der Fall ist, wird die zuvor gespeicherte Umgebung wiederhergestellt.
Falls session.auto_start aktiviert ist, können Objekte nur dann in Sessions aufgenommen werden, wenn die Klassendefinition mittels auto_prepend_file geladen wird. Andernfalls muss das Objekt mittels serialize() serialisiert werden und danach mittels unserialize() deserialisiert werden.
$_SESSION (und alle registrierten Variablen) werden intern von PHP unter Verwendung der in der Konfigurationseinstellung session.serialize_handler festgelegten Serialisierungsroutine serialisiert, nachdem die Anfrage beendet ist. Registrierte Variablen, die nicht definiert sind, werden als nicht definiert gekennzeichnet. Auch bei den folgenden Zugriffen werden sie nicht vom Session-Modul definiert, außer der Benutzer definiert sie später.
Weil Session-Daten serialisiert werden, können Variablen vom Typ resource nicht in der Session gespeichert werden.
Die Serialisierungsroutinen (php
und
php_binary
) erben die Beschränkungen für
register_globals. Daher können numerische Indizes oder alphanumerische
Indizes, die Sonderzeichen (|
und !
)
enthalten, nicht verwendet werden. Deren Verwendung erzeugt Fehler beim
Beenden des Skripts. php_serialize
hat diese
Einschränkungen nicht.
Hinweis:
Es ist beim Arbeiten mit Sessions zu beachten, dass der Datensatz einer Session erst dann erstellt wird, wenn eine Variable durch Hinzufügen eines neuen Schlüssels zum superglobalen Array $_SESSION registriert wurde. Das gilt auch dann, wenn eine Session mit der Funktion session_start() gestartet wurde.