La clase SessionHandlerInterface

(PHP 5 >= 5.4.0, PHP 7)

Introducción

SessionHandlerInterface es una interfaz que define un prototipo para crear un gestor de sesiones personalizado. Para pasar un gestor de sesiones personalizado a session_set_save_handler() usando su invocación de POO, la clase debe implementar esta interfaz.

Observe que los métodos de llamada de retorno de esta clase están diseñados para ser llamados internamente por PHP y no para ser llamados desde código de espacio de usuario.

Sinopsis de la Clase

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

Ejemplo #1 Ejemplo usando SessionHandlerInterface

El siguiente ejemplo proporciona almacenamiento de sesiones basado en ficheros similar al gestor de almacenamiento de sesiones predeterminado de PHP files. Este ejemplo podría fácilmente ser extendido para cubrir almacenamiento de bases de datos usando su motor de bases de datos favorito soportado por PHP.

Observe que usamos el prototipo de POO con session_set_save_handler() y registramos la función de cierre usando la bandera de parámetro de la función. Esto normalmente es aconsejable al registrar objetos como gestores de almacenamiento de sesiones.

<?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();

// proceed to set and retrieve values by key from $_SESSION

Tabla de contenidos