El siguiente código es para versiones de PHP inferiores a 5.4.0.
El siguiente ejemplo proporciona un almacenamiento de sesiones basado en fichero similar al
gestor de almacenamiento de sesiones de PHP predeterminado files
. Este
ejemplo podría extenderse fácilmente para cubrir el almacenamiento de bases de datos usando su
motor de bases de datos favorito soportado por PHP.
Observe que registramos de forma adicional la función de cierre session_write_close()
usando register_shutdown_function() bajo PHP inferior a 5.4.0.
Esto se recomienda generalmente al registrar objetos como gestores de almacenamiento de sesiones bajo PHP inferior
a 5.4.0.
<?php
class FileSessionHandler
{
private $savePath;
function open($savePath, $sessionName)
{
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}
return true;
}
function close()
{
return true;
}
function read($id)
{
return (string)@file_get_contents("$this->savePath/sess_$id");
}
function write($id, $data)
{
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
function destroy($id)
{
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}
return true;
}
function gc($maxlifetime)
{
foreach (glob("$this->savePath/sess_*") as $file) {
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
unlink($file);
}
}
return true;
}
}
$handler = new FileSessionHandler();
session_set_save_handler(
array($handler, 'open'),
array($handler, 'close'),
array($handler, 'read'),
array($handler, 'write'),
array($handler, 'destroy'),
array($handler, 'gc')
);
// lo siguiente previene de efectos inesperados al usar objetos como gestores de almacenamiento
register_shutdown_function('session_write_close');
session_start();
// proceder para establecer y recuperar valores por clave desde $_SESSION