session_set_save_handler

session_set_save_handler

(PHP 4, PHP 5)

session_set_save_handler --  Establece unas funciones para el almacenamiento de los datos de la sesi贸n a nivel de usuario

Descripci贸n

bool session_set_save_handler ( string abrir, string cerrar, string leer, string escribir, string destruir, string gc )

session_set_save_handler() establece las funciones que se utilizan a nivel de usuario para el almacenamiento y recuperaci贸n de los datos asociados a una sesi贸n. Es lo m谩s 煤til cuando se prefiere utilizar otro m茅todo de almacenamiento distinto del proporcionaddo por las sesiones de PHP. p.ej. Almacenar los datos de la sesi贸n en una base de datos local. Devuelve TRUE si todo se llev贸 a cabo correctamente, FALSE en caso de fallo.

Nota: Debe cambiar la opci贸n session.save_handler en la configuraci贸n a user en su archivo php.ini para que session_set_save_handler() tenga efecto.

Nota: El manejador "escribir" no se ejecuta hasta que se cierra la salida. Por ello, la salida de las sentencias que coloquemos en el manejador "escribir" para el depurado nunca ser谩 enviadas al navegador. Si se necesita producir una salida para el depurado, se sugiere que la salida se produzca en un archivo.

El siguiente ejemplo proporciona almacenamiento de las sesiones basado en archivos de forma similar al manejador de sesiones por defecto de PHP files. Este ejemplo puede ser extendido f谩cilmente para cubrir el almacenamiento en bases de datos usando su motor de soporte de bases de datos de PHP favorito.

La funci贸n de lectura debe devolver siempre una cadena para que el manejador de escritura funcione como se espera. Devuelva una cadena vac铆a si no hay ning煤n dato a leer. Los valores devueltos de otros manejadores son convertidos a una expresi贸n booleana. TRUE si todo ha ido correctamente, FALSE si ha habido alg煤n problema.

Ejemplo 1. Ejemplo de session_set_save_handler()

<?php
function abrir ($save_path, $session_name) {
  global
$sess_save_path, $sess_session_name;
       
  
$sess_save_path = $save_path;
  
$sess_session_name = $session_name;
  return(
true);
}

function
cerrar() {
  return(
true);
}

function
leer ($id) {
  global
$sess_save_path, $sess_session_name;

  
$sess_file = "$sess_save_path/sess_$id";
  if (
$fp = @fopen($sess_file, "r")) {
    
$sess_data = fread($fp, filesize($sess_file));
    return(
$sess_data);
  } else {
    return(
""); // Debe devolver "" aqu&iacute;.
  
}

}

function
escribir ($id, $sess_data) {
  global
$sess_save_path, $sess_session_name;

  
$sess_file = "$sess_save_path/sess_$id";
  if (
$fp = @fopen($sess_file, "w")) {
    return(
fwrite($fp, $sess_data));
  } else {
    return(
false);
  }

}

function
destruir ($id) {
  global
$sess_save_path, $sess_session_name;
       
  
$sess_file = "$sess_save_path/sess_$id";
  return(@
unlink($sess_file));
}

/***********************************************
* ATENCI&Oacute;N - Necesitar&aacute; implementar alg&uacute;n     *
* tipo de rutinas recolectoras de basura aqu&iacute; *
***********************************************/
function rb ($maxlifetime) {
  return
true;
}

session_set_save_handler ("abrir", "cerrar", "leer", "escribir", "destruir", "rb");

session_start();

// proceed to use sessions normally

?>