Класс SessionHandlerInterface SessionHandlerInterface
&reftitle.intro; SessionHandlerInterface — интерфейс, который определяет минимальный прототип для создания пользовательского обработчика сессии. Для предоставления пользовательского обработчика сессии функции session_set_save_handler, используя её ООП реализацию, класс должен реализовывать этот интерфейс. Обратите внимание, что callback-методы этого класса созданы для внутренних вызовов PHP и не предназначены для вызовов из вашего кода.
&reftitle.interfacesynopsis; SessionHandlerInterface &Methods;
&reftitle.examples; Пример использования класса <classname>SessionHandlerInterface</classname> Следующий пример реализует файловую сессию таким же образом, как это реализовано во внутреннем обработчике сессии PHP. Этот пример может быть легко расширен для обеспечения хранения сессий в предпочитаемой вами базе данных. Обратите внимание, что мы используем объектно-ориентированные прототипы с функцией session_set_save_handler и регистрируем функцию завершения (shutdown) используя один из параметров этой функции. Это действие рекомендуется производить в большинстве случаев, когда объекты регистрируются в качестве обработчиков сессии. Для краткости в этом примере не добавлена проверка входных данных. Обратите внимание, что параметр $id предоставляется пользователем и обязательно должен проверяться для исключения возможных атак, использующих, например, проблемы обхода пути. Так что ни в коем случае не используйте этот код в промышленной эксплуатации, не добавив соответствующие проверки. 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(); // Продолжаем работать с переменными сессии, устанавливая или читая их значение из суперглобальной переменной $_SESSION ?> ]]>
&reference.session.entities.sessionhandlerinterface;