(Php 4, Php 5, Php 7, Php 8)
Session_set_save_handler-Setzen Sie die benutzerdefinierte Sitzungsspeicherfunktion
veranschaulichen
session_set_save_handler( callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc, callable $create_sid = ?, callable $validate_sid = ?, callable $update_timestamp = ? ): bool
Sie können eine benutzerdefinierte Sitzungsspeicherfunktion unter Verwendung der folgenden Methode registrieren:
session_set_save_handler(object $sessionhandler, bool $register_shutdown = true): bool
Session_set_save_handler () legt eine benutzerdefinierte Sitzungsspeicherfunktion fest. Wenn Sie eine andere Methode als den integrierten Sitzungsmechanismus von PHP verwenden möchten, können Sie diese Funktion verwenden. Beispielsweise können Sitzungsspeicherfunktionen so angepasst werden, dass Sitzungsdaten in einer Datenbank gespeichert werden.
Parameter Es gibt 2 Prototypen dieser Funktion:
SessionHandler
Ein Objekt, das SessionHandlerInterface, SessionIDInterface (optional) und/oder sessionUpDateTimestAMPHandlerInterface -Schnittstellen wie SessionHandler implementiert.
Register_Shutdown
Registrieren Sie die Funktion Session_write_close () als Funktion register_shutdown_function ().
oder
Öffnen (String $ SavePath, String $ sessionName)
Der folgende Signature Callable Callback wird implementiert:
open(string $savePath, string $sessionName): bool
Die offene Rückruffunktion ähnelt dem Klassenkonstruktor und wird beim Öffnen der Sitzung aufgerufen. Dies ist die erste Rückruffunktion, die die Sitzung automatisch startet oder manuell startet, indem Sie Session_Start () aufrufen. Diese Rückruffunktion Operation gibt true erfolgreich, ansonsten falsch zurück.
Schließen
Die Abruffunktion ist ähnlich wie der Destruktor der Klasse. Nach dem Schreiben von Callback -Funktion aufgerufen. Die Rückruffunktion schließen auch, nachdem die Funktion Session_write_close () aufgerufen wurde. Diese Rückruffunktion Operation gibt true erfolgreich, ansonsten falsch zurück.
lesen
Der folgende Signature Callable Callback wird implementiert:
read(string $sessionId): string
Wenn in der Sitzung Daten vorhanden sind, muss die Read -Callback -Funktion eine Zeichenfolge (serialisiert) der Sitzungsdaten zurückgeben. Wenn in der Sitzung keine Daten vorhanden sind, gibt die Read Callback -Funktion eine leere Zeichenfolge zurück.
Nachdem PHP die Sitzung automatisch gestartet oder die Sitzung mit dem Aufrufen der Session_start () -Funktion manuell gestartet hat, ruft PHP die Read -Callback -Funktion intern auf, um Sitzungsdaten zu erhalten. PHP ruft die Open -Rückruffunktion vor, bevor sie aufgerufen wird.
Das vom Lesecallback zurückgegebene serialisierte Zeichenfolgenformat muss genau dem Format entsprechen, wenn der Schreibrückruf Daten speichert. PHP wird die zurückgegebene Zeichenfolge automatisch deserialisiert und füllt die Super Global Variable $ _Session. Obwohl die Daten der Funktion serialize () sehr ähnlich aussehen, sollte beachtet werden, dass sie unterschiedlich sind. Weitere Informationen finden Sie unter: Session.serialize_handler.
Schreiben
Der folgende Signature Callable Callback wird implementiert:
write(string $sessionId, string $data): bool
Die Write Callback -Funktion wird aufgerufen, wenn die Sitzung Daten speichert. Diese Rückruffunktion dauert als Parameter die aktuelle Sitzungs -ID und die Zeichenfolge nach der Datenserialisierung in $ _Session. Der Prozess der Serialisierungssitzungsdaten wird von PHP basierend auf der Sitzung abgeschlossen.
Die serialisierten Daten werden der Sitzungs -ID für die Speicherung zugeordnet. Wenn die Read -Callback -Funktion aufgerufen wird, um Daten zu erhalten, müssen die zurückgegebenen Daten vollständig mit den Daten übereinstimmen, die in die Write Callback -Funktion übergeben wurden.
PHP nennt diese Rückruffunktion, nachdem das Skript ausgeführt wurde oder die Funktion Session_write_close () aufgerufen wird. Beachten Sie, dass nach dem Aufrufen dieser Rückruffunktion die Rückruffunktion schließen wird, wird intern in PHP aufgerufen.
Beachten:
PHP ruft die Write Callback -Funktion erst auf, nachdem der Ausgabestream geschrieben und geschlossen wurde, sodass die Debugging -Informationen in der Funktion "Write Callback" nicht an den Browser ausgegeben werden. Wenn Sie die Debug -Ausgabe in der Funktion "Write Callback" verwenden müssen, wird empfohlen, eine Debug -Ausgabe in eine Datei zu schreiben.
zerstören
Der folgende Signature Callable Callback wird implementiert:
destroy(string $sessionId): bool
Diese Rückruffunktion wird aufgerufen, wenn die Funktion Session_Destroy () aufgerufen wird, oder die Funktion Session_regenerate_id () wird aufgerufen und der Zerstörungsparameter wird auf true gesetzt. Diese Rückruffunktion Operation gibt true erfolgreich, ansonsten falsch zurück.
GC
Der folgende Signature Callable Callback wird implementiert:
gc(int $lifetime): bool
Um alte Daten in der Sitzung aufzuräumen, ruft PHP die Müllsammlungs -Rückruffunktion von Zeit zu Zeit auf. Der Anrufzyklus wird durch die Session.gc_Probability und Session.gc_divisor -Parameter gesteuert. Der in diese Rückruffunktion übergebene Lebensdauerparameter wird durch seision.gc_maxlifetime festgelegt. Diese Rückruffunktion Operation gibt true erfolgreich, ansonsten falsch zurück.
create_sid
Der folgende Signature Callable Callback wird implementiert:
create_sid(): string
Führen Sie diese Rückruffunktion aus, wenn eine neue Sitzungs -ID erforderlich ist. Es wird keine Parameter übergeben, wenn sie aufgerufen wird, und sein Rückgabewert sollte eine von String formatierte, gültige Sitzungs-ID sein.
validate_sid
Der folgende Signature Callable Callback wird implementiert:
validate_sid(string $key): bool
Nach der Eröffnung der Sitzung wird dieser Rückruf ausgeführt, wenn eine Sitzung gestartet wird und die Sitzungs -ID bereitgestellt wird. Die Parameterschlüssel ist die zu überprüfende Sitzungs -ID. Wenn die Sitzung dieser ID bereits vorhanden ist, handelt es sich um eine gültige Sitzungs -ID. Der Rückgabewert sollte auf Erfolg und falsches Misserfolg der Fall sein.
UPDATE_TIMESTAMP
Der folgende Signature Callable Callback wird implementiert:
update_timestamp(string $key, string $val): bool
Führen Sie diesen Rückruf bei, wenn Sie die Sitzung aktualisieren. Der Parameterschlüssel ist die Sitzungs -ID; Das Parameter Val ist die Sitzungsdaten. Der Rückgabewert sollte auf Erfolg und falsches Misserfolg der Fall sein.
Rückgabewert?
Gibt auf Erfolg oder Falsch auf das Scheitern zurück.
Beispiel?
Beispiel #1 Benutzerdefinierte Sitzungshandler: Siehe SessionHandlerInterface für den vollständigen Code.
Hier ist nur die Anrufmethode aufgeführt. Für den vollständigen Code finden Sie in SessionHandlerInterface.
Hier wird der OOP -Prototyp der Funktion Session_set_save_handler () verwendet und der zweite Parameter wird verwendet, um die Heruntergangsfunktion zu registrieren. Dies wird empfohlen, wenn ein Objekt als Sitzungsspeicherhandler registriert wird.
<?php class MySessionHandler implements SessionHandlerInterface { // 在这里实现接口} $handler = new MySessionHandler(); session_set_save_handler($handler, true); session_start(); // 现在可以使用$_SESSION 保存以及获取数据了
Kommentarwarnung: Schreiben und Schließen von Rückruffunktionen werden nach der Zerstörung des Objekts nicht aufgerufen. Daher können Objekte in diesen beiden Rückruffunktionen weder verwendet werden noch Ausnahmen können nicht geworfen werden. Wenn eine Ausnahme in eine Funktion ausgelöst wird, fängt sie sie weder auf oder verfolgt es, was dazu führt, dass das Programm abnormal beendet wird. Aber Objektzerstörer können Sitzungen verwenden.
Die Funktion Session_write_Close () kann im Destruktor aufgerufen werden, um dieses Problem zu lösen. Die Registrierung der Heruntergangs -Rückruffunktion ist jedoch eine zuverlässigere Möglichkeit, dies zu tun.
Warnung Wenn die Sitzung nach Abschluss des Skripts geschlossen ist, wurde das aktuelle Arbeitsverzeichnis für einige SAPIs möglicherweise geändert. Die Funktion Session_write_close () kann aufgerufen werden, um die Sitzung zu schließen, bevor die Skriptausführung endet.