(PHP 5 >= 5.4.0, PHP 7)
SessionHandlerInterface é uma interface que define um protótipo para criar um manipulador de sessão personalizado. Para passar um manipulador de sessão personalizado para session_set_save_handler() usando invocação Orientada à Objetos, a classe deve implementar esta interface.
Note que os métodos de callbacks desta classe são projetos para serem chamados internamente pelo PHP e não para serem chamados pelo código do usuário.
Exemplo #1 Exemplo usando SessionHandlerInterface
O exemplo a seguir apresenta um armazenamento de sessão baseada em arquivos semelhante aos
manipuladores de gravação de sessão padrões do PHP files. Este
exemplo poderia ser facilmente estendido para cobrir armazenamento em banco de dados usando sua
engine de banco de dados favorita que seja suportada pelo PHP.
Note que é usado orientação à objetos com session_set_save_handler() e a função de encerramento (register_shutdown) é registrada usando sua respectiva flag. Isto é aconselhável ao registrar objetos como manipuladores de gravação de sessão.
<?php
class MySessionHandler implements SessionHandlerInterface
{
private $savePath;
public function open($savePath, $sessionName)
{
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}
return true;
}
public function close()
{
return true;
}
public function read($id)
{
return (string)@file_get_contents("$this->savePath/sess_$id");
}
public function write($id, $data)
{
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
public function destroy($id)
{
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}
return true;
}
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();
// proceder para definir e recuperar valores pela chave de $_SESSION