A classe SessionHandlerInterface
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
Introdução
SessionHandlerInterface é uma interface que define o protótipo mínimo para criar um manipulador de sessão personalizado. Para passar um manipulador de sessão personalizado para session_set_save_handler() usando invocação OOP (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.
Resumo da Interface
Exemplos
Example #1 Exemplo usando SessionHandlerInterface
O exemplo a seguir fornece um armazenamento de sessão baseado em arquivos similar ao
manipulador de gravação padrão de sessões do PHP, files
. Este
exemplo poderia facilmente ser estendido para cobrir armazenamento em banco de dados usando
o motor de banco de dados de sua preferência suportado pelo PHP.
Observe que é usado o protótipo orientado a objetos com session_set_save_handler() e a função de encerramento (register_shutdown) é registrada usando a opção de parâmetro da função. Isto é geralmente aconselhável ao registrar objetos como manipuladores de gravação de sessão.
Por brevidade, este exemplo omite a validação de entrada. No entanto, o
parâmetros $id
são, na verdade, valores fornecidos pelo usuário que
exigem validação e sanitização adequadas para evitar vulnerabilidades, como
problemas de passagem de caminho. Portanto, não use este exemplo não modificado em
ambientes de produção.
<?php
class MySessionHandler implements SessionHandlerInterface
{
private $savePath;
public function open($savePath, $sessionName): bool
{
$this->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();
// proceder para definir e recuperar valores pela chave de $_SESSION
Table of Contents
- SessionHandlerInterface::close — Fecha a sessão
- SessionHandlerInterface::destroy — Destrói uma sessão
- SessionHandlerInterface::gc — Remove sessões antigas
- SessionHandlerInterface::open — Inicializa uma sessão
- SessionHandlerInterface::read — Lê os dados de sessão
- SessionHandlerInterface::write — Escreve os dados de sessão