Die Schnittstelle SessionHandlerInterface SessionHandlerInterface
&reftitle.intro; SessionHandlerInterface ist eine Schnittstelle, die den minimalen Prototyp für die Erstellung einer benutzerdefinierten Sessionverwaltung definiert. Um eine benutzerdefinierte Sessionverwaltung an session_set_save_handler zu übergeben, die ihren OOP-Aufruf verwendet, kann die Klasse diese Schnittstelle implementieren. Es ist zu beachten, dass die Callback-Methoden dieser Klasse dazu gedacht sind, intern von PHP aufgerufen zu werden und nicht aus dem Anwenderprogramm aufgerufen werden sollen.
&reftitle.interfacesynopsis; SessionHandlerInterface &Methods;
&reftitle.examples; Ein Beispiel mit <classname>SessionHandlerInterface</classname> Das folgende Beispiel bietet eine dateibasierte Session-Speicherung ähnlich dem standardmäßigen PHP-Session-Speicherverwalter (PHP Session Standard Save Handler) files. Dieses Beispiel kann leicht erweitert werden, um die Speicherung in einer Datenbank mit der bevorzugten von PHP unterstützten Datenbank-Engine zu ermöglichen. Zu beachten ist, dass wir den OOP-Prototyp zusammen mit session_set_save_handler verwenden und die Shutdown-Funktion mit dem Parameter flag der Funktion registrieren. Dies wird im Allgemeinen empfohlen, wenn Objekte als Session-Speicherverwalter registriert werden. Der Kürze halber wird in diesem Beispiel auf eine Überprüfung der Eingaben verzichtet. Allerdings handelt es sich bei den $id-Parametern um vom Benutzer gelieferte Werte, die unbedingt überprüft und bereinigt werden müssen, um Schwachstellen, &zb; Path-Traversal-Probleme, zu vermeiden. Dieses Beispiel sollte daher nicht unverändert in Produktivumgebungen verwendet werden. savePath = $savePath; if (!is_dir($this->savePath)) { mkdir($this->savePath, 0777); } return true; } public function close(): bool { return true; } #[\ReturnTypeWillChange] public function read($id) { return (string) @file_get_contents("$this->savePath/sess_$id"); } public function write($id, $data): bool { return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true; } public function destroy($id): bool { $file = "$this->savePath/sess_$id"; if (file_exists($file)) { unlink($file); } return true; } #[\ReturnTypeWillChange] public function gc($maxlifetime) { foreach (glob("$this->savePath/sess_*") as $file) { if (filemtime($file) + $maxlifetime < time() && file_exists($file)) { unlink($file); } } return true; } } $handler = new MySessionHandler(); session_set_save_handler($handler, true); session_start(); // Fortfahren mit dem Setzen und Abrufen von Werten anhand der // Schlüssel von $_SESSION ]]>
&reference.session.entities.sessionhandlerinterface;