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í_
}
}
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ÓN _ Necesitará implementar algún *
* tipo de rutinas recolectoras de basura aquí *
***********************************************/
function rb ($maxlifetime) {
return true;
}
session_set_save_handler ("abrir", "cerrar", "leer", "escribir", "destruir", "rb");
session_start();
// proceed to use sessions normally
?>