Sessões
PHP Manual

A classe SessionHandlerInterface

(PHP 5 >= 5.4.0, PHP 7)

Introdução

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.

Sinopse da classe

SessionHandlerInterface {
/* Métodos */
abstract public bool close ( void )
abstract public bool destroy ( string $session_id )
abstract public bool gc ( int $maxlifetime )
abstract public bool open ( string $save_path , string $session_name )
abstract public string read ( string $session_id )
abstract public bool write ( string $session_id , string $session_data )
}

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->savePath0777);
        }

        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($handlertrue);
session_start();

// proceder para definir e recuperar valores pela chave de $_SESSION

Índice


Sessões
PHP Manual