Funciones de Sesiones
PHP Manual

session_set_save_handler

(PHP 4, PHP 5)

session_set_save_handlerEstablece funciones de almacenamiento de sesiones a nivel de usuario

Descripción

bool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )

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.

Parámetros

open

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.

close

Función close, funciona como un destructor en las clases y se ejecuta cuando la operación de sesión está hecha.

read

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.

write

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.

destroy

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.

gc

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.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

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

?>

Notas

Warning

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".

Warning

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().

Ver también


Funciones de Sesiones
PHP Manual