Gestores de Sesión Personalizados
Para implementar el almacenamiento en bases de datos, o cualquier otro método de almacenamiento,
se necesita usar session_set_save_handler() para
crear un conjunto de funciones de almacenamiento a nivel de ususario. A partir de PHP 5.4.0 se pueden crear gestores de sesiones
usando la clase SessionHandlerInterface o extendiendo los gestores internos de PHP heredando
de la clase SessionHandler.
Las llamadas de retorno especificadas en session_set_save_handler() son métodos
llamados por PHP durante el ciclo de vida de una sesión: open
, read
,
write
y close
, y para las tareas domésticas:
destroy
para borrar una sesión y gc
para la recoleción periódica
de basura.
Por lo tanto, PHP siempre necesita gestores de almacenamiento de sesiones. El predeterminado normalmente es el
gestor de almacenamiento interno 'files'. Se puede establecer un gestor de almacenamiento personalizado usando
session_set_save_handler(). Se pueden porporcionar de forma alternativa gestores de almacenamiento
interno mediante extensiones de PHP, tales como sqlite
,
memcache
y memcached
y pueden establecerse con
session.save_handler.
Cuando se inicia la sesión, PHP llamará internamente al gestor open
seguido de
la llamada de retorno read
la cual debería devolver una cadena codificada exactamente como si fuera
pasada originalmente para almacenamiento. Una vez que la llamada de retorno read
devuelve la cadena codificada, PHP
la decodificará y rellenará el array resultante en la variable superglobal $_SESSION.
Cuando PHP se cierra (o se llama a session_write_close()),
PHP codificará internamente la variable superglobal $_SESSION y la pasará
conjuntamente con el ID de sesión a la llamada de retorno write
.
Después de finalizada la llamada de retorno write
, PHP invocará internamente al
gestor de llamada de retorno close
.
Cuando una sesión se destruye de forma específica, PHP llamará al gestor destroy
con
el ID de sesión.
PHP llamará a la llamada de retorno gc
de vez en cuando para
terminar cualquier registro de sesión según lo establecido en el tiempo de vida máximo de una sesión.
Esta rutina debería borrar todos los registros del almacenamiento persistente a los que se
accedió por última vez más allá del parámetro $lifetime
.