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.

add a note add a note

User Contributed Notes 1 note

up
-6
tony at marston-home dot demon dot co dot uk
6 years ago
Your custom session handler should not contain calls to any of the session functions, such as session_name() or session_id(), as the relevant values are passed as arguments on various handler methods. Attempting to obtain values from alternative sources may not work as expected.
To Top