(PHP 4, PHP 5)
session_set_save_handler — Establece funciones de almacenamiento de sesiones a nivel de usuario
session_set_save_handler() establece las funciones de almacenamiento de sesiones a nivel de usuario que se usan para almacenar y recuperar información asociada con una sesión. Ésto es más útil cuando se prefiere un método de almacenamiento distinto de aquellos proporcionados por las sesiones de PHP. Esto es, almacenar la información de sesión en una base de datos local.
Función open, funciona como un constructor en las clases y se ejecuta cuando la sesion está siendo abierta. La función open espera dos parámetros, donde el primero es la ruta de almacenamiento y el segundo es el nombre de sesión.
Función close, funciona como un destructor en las clases y se ejecuta cuando la operación de sesión está hecha.
La función read debe devolver siempre un valor de cadena para que el gestor de almacenamiento funcione como se esperaba. Devolver una cadena vacía si no hay información que leer. Los valores devueltos de otros gestores se convierten en expresiones booleanas. TRUE para éxito, FALSE para fallo.
Escribe una función que es llamada cuando los datos de la sesión son guardados. Esta función espera dos parámetros: un identificador y los datos asociados.
Note:
El gestor "write" no se ejecuta hasta después de que se cierre el flujo de salida. Así, la salida desde declaraciones de depuración en el gestor "write" nunca serán vistas en el navegador. Si es necesaria la salida de depuración, se sugiere que la salida de depuración sea escrita en un archivo en su lugar.
El gestor destroy, se ejecuta cuando una sesión se destruye con session_destroy() y toma el id de sesión como su único parámetro.
El recolector de basura (Garbage Collector, en inglés), es ejecuta cuando el recolector de basura de sesiones se ejecuta y toma el tiempo de vida de sesión máximo como su único parámetro.
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Example #1 Ejemplo de session_set_save_handler()
El siguiente ejemplo proporciona almacenamiento de sesiones basado en archivos similar al gestor de almacenamiento por defecto de sesiones de PHP files. Este ejemplo podría extenderse fácilmente para cubrir el almacenamiento en bases de datos usando su motor de bases de datos favorito soportado por PHP.
<?php
function open($save_path, $session_name)
{
global $sess_save_path;
$sess_save_path = $save_path;
return(true);
}
function close()
{
return(true);
}
function read($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return (string) @file_get_contents($sess_file);
}
function write($id, $sess_data)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data);
fclose($fp);
return $return;
} else {
return(false);
}
}
function destroy($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}
function gc($maxlifetime)
{
global $sess_save_path;
foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename);
}
}
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// proceder a usar sesiones normamente
?>
A partir de PHP 5.0.5 los gestores write y close son llamados después de la destrucción del objeto y por lo tanto no pueden usar objetos o lanzar excepciones. Sin embargo, los destructores de objetos pueden usar sesiones.
Es posible llamar a session_write_close() desde el destructor para solucionar este problema de "quién fue antes, si el huevo o la gallina".
El directorio de trabajo actual es cambiado en algunas SAPI si la sesión se cierra al finalizar el script. Es posible cerrar la sesión antes con session_write_close().