Individuelle Session-Routinen

Wenn die Speicherung in einer Datenbank oder irgendeine andere Art der Speicherung implementiert werden soll, kann session_set_save_handler() verwendet werden, um eine Reihe benutzerdefinierte Speicherfunktionen zu erstellen. Mit dem SessionHandlerInterface können Session-Routinen erstellt werden oder PHP-interne Routinen durch Beerbung von SessionHandler erweitert werden.

Die in session_set_save_handler() definierten Callback-Funktionen sind Methoden, die von PHP während des Lebenszyklus einer Session aufgerufen werden: open, read, write und close und für Verwaltungsaufgaben: destroy um eine Session zu löschen und gc für die regelmäßige Speicherbereinigung.

Deshalb benötigt PHP immer Session-Speicherroutinen. Der Standard ist normalerweise die interne 'files'-Speicherroutine. Eine benutzerdefinierte Speicherroutine kann mittels session_set_save_handler() erstellt werden. Alternative interne Speicherroutinen werden auch von PHP-Erweiterungen, z. B. sqlite, memcache und memcached zur Verfügung gestellt und können mittels session.save_handler festgelegt werden.

Wenn die Session beginnt, ruft PHP intern die open-Routine, gefolgt vom read-Callback auf, der eine verschlüsselte Zeichenkette genau so zurückgeben sollte, wie sie ursprünglich für die Speicherung übergeben wurde. Nachdem der read-Callback die verschlüsselte Zeichenkette zurückgegeben hat, wird sie von PHP entschlüsselt und die Superglobale $_SESSION mit dem resultierenden Array gefüllt.

Wenn das PHP-Skript endet (oder wenn session_write_close() aufgerufen wird), wird die Superglobale $_SESSION intern verschlüsselt und zusammen mit der Session-ID an den write-Callback übergeben. Nach dem write-Callback ruft PHP intern den close-Callback auf.

Wenn eine Session gelöscht werden soll, ruft PHP die destroy-Routine mit der Session-ID auf.

Von Zeit zu Zeit ruft PHP den gc-Callback auf, um Sessions zu löschen, die entsprechend ihrer eingestellten maximalen Lebensdauer abgelaufen sind. Diese Routine sollte alle gespeicherten Datensätze löschen, auf die länger als die in $lifetime festgelegte Zeitspanne nicht mehr zugegriffen wurde.

add a note add a note

User Contributed Notes 1 note

up
-17
tony at marston-home dot demon dot co dot uk
5 years ago
Your custom session handler should not contain calls to any of the session functions, such as session_name() or session_id(), as the relevant values are passed as arguments on various handler methods. Attempting to obtain values from alternative sources may not work as expected.
To Top