· Declaración de Sesiones
Las sesiones son simplemente variables que mantienen
su valor para cada usuario a lo largo de toda la visita a nuestra página web,
no como las variables normales, que sólo están activas durante la ejecución del
script.. Por ejemplo, si tenemos la variable $nombre = 'Jose'; ésta seguirá
activa durante toda la ejecución del script, pero al cambiar de página ésta
desaparecerá. En cambio una variable de sesión permanecerá activa y con el
valor que le hayamos asignado durante toda la visita del usuario.
Para utilizar variables de sesión es tan sencillo como
llamar a session_start() al principio de la página, antes de cualquier salida
(antes de <html> y cualquier otra cosa que se muestre en pantalla) y usar
la variable superglobal $_SESSION para almacenar valores.
Vamos a hacer un ejemplo sencillo con dos páginas, en
una definiremos una variable de sesión y en la otra veremos su valor.
Página 1:
<?php
session_start();
$_SESSION['nombre']
= 'Juan';
?>
Página 2:
<?php
session_start();
echo "El nombre es: ".$_SESSION['nombre'];
?>
Guardamos el código en pagina1.php y pagina2.php
respectivamente.
Siempre tenemos que llamar a session_start() antes de
usar las sesiones, ya sea para acceder a ellas o para almacenar valores. Si
ejecutamos la primera página veremos que aparece en blanco, pero si
seguidamente vamos a la página 2 veremos que aparece "El nombre es:
Juan", sin embargo, "Juan" no aparece por ninguna parte en el
código de la pagina2.php, todo es obra de las sesiones.
Esto nos puede ser útil por ejemplo para identificar a
un usuario. Primero comprobaríamos en la base de datos si el usuario y
contraseña introducido es correcto y si es así haríamos algo del tipo
$_SESSION['logged'] = true. Luego sólo tendríamos que comprobar esta variable
de sesión.
· Funciones para el Manejo de Sesiones
session_cache_expire
(PHP
4 >= 4.2.0, PHP 5)
session_cache_expire -- Devuelve la caducidad actual
del caché
Descripción
int session_cache_expire ( [int nueva_caducidad_cache]
)
session_cache_expire() devuelve la caducidad actual
del caché. Si se proporciona nueva_caducidad_cache, se reemplazará la caducidad
actual con nueva_caducidad_cache.
session_cache_limiter
(PHP
4 >= 4.0.3, PHP 5)
session_cache_limiter -- Lee y/o cambia el limitador
del caché actual
Descripción
string session_cache_limiter ( [string
limitador_del_cache] )
session_cache_limiter() devuelve el nombre del
limitador de caché actual. Si se especifica limitador_del_cache, el nombre del
limitador de caché actual se cambia al nuevo valor.
El limitador de caché controla las cabeceras HTTP de
control del caché enviadas al cliente. Estas cabeceras determinan las reglas
por las que el contenido de la página puede ser guardado en el caché local del
cliente. Cambiando el limitador de caché a nocache, por ejemplo, impedirá
cualquier tipo de almacenamiento en el caché por parte del cliente. Un valor de
public, en cambio, permitiría el almacenamiento en el caché. Tambié se puede
cambiar a private, que es un poco más restrictivo que el public.
En el modo private, la cabecera Expire (caducidad)
enviada al cliente puede confundir a algunos navegadores incluyendo Mozilla.
Puede evitar este problema con el modo private_no_expire. La cabecera Expire
nunca se envía al cliente en este modo.
Nota: private_no_expire fue añadida en PHP 4.2.0dev.
Al comenzar la ejecución del script, el limitador de
caché se reestablece al valor por defecto guardado en session.cache_limiter. De
este modo, es necesario llamar a session_cache_limiter() en cada petición (y
antes de llamar a session_start()).
Ejemplo 1. Ejemplos con session_cache_limiter()
<?php
# cambia el limitador del caché a 'private'
session_cache_limiter('private');
$cache_limiter
= session_cache_limiter();
echo "El limitador de caché
está puesto ahora en $cache_limiter<p>";
?>
session_commit
(PHP
4 >= 4.3.11, PHP 5)
session_commit
-- Alias of session_write_close()
Descripción
This
function is an alias of: session_write_close().
session_decode
(PHP 4, PHP 5)
session_decode -- Decodifica los datos de una sesión a
partir de una cadena
Descripción
bool session_decode ( string datos )
session_decode() decodifica los datos de una sesión
que se encuentran en datos, creando las variables guardadas en la sesión.
session_destroy
(PHP 4, PHP 5)
session_destroy -- Destruye todos los datos guardados
en una sesión
Descripción
bool session_destroy ( void )
session_destroy() destruye todos los datos asociados
con la sesión actual. No destruye ninguna de las variables globales asociadas a
la sesión ni la cookie.
Esta función devuelve TRUE si se ha destruido la
sesión correctamente y FALSE si ha habido algún problema al intentarlo.
Ejemplo 1. Destrucción de una sesión
<?php
// Inicializa de la sesión.
// Si está usando session_name("algo"),
¡no lo olvide ahora!
session_start();
// Destruye todas las variables de la
sesión
session_unset();
// Finalmente, destruye la sesión
session_destroy();
?>
session_encode
(PHP 4, PHP 5)
session_encode --
Codifica los datos de la sesión actual en una cadena
Descripción
string session_encode ( void )
session_encode() devuelve una cadena con el contenido
de la sesión actual en su interior.
session_get_cookie_params
(PHP
4, PHP 5)
session_get_cookie_params -- Obtiene los parámetros de la cookie de la
sesión
Descripción
array
session_get_cookie_params ( void )
La función session_get_cookie_params() devuelve un
vector con información sobre la cookie de la sesión actual, conteniendo los
siguientes elementos:
"lifetime" - La duración de la cookie.
"path" - La ruta donde se guarda la información.
"domain"
- El dominio de la cookie.
"secure" - La cookie debe ser enviada sólo bajo conexiones
seguras. (Este elemento fue añadido en PHP 4.0.4.)
session_id
(PHP 4, PHP 5)
session_id -- Lee y/o cambia el session id actual
Descripción
string
session_id ( [string id] )
session_id() devuelve el session id de la sesión
actual. Si se especifica un id, reemplazará el session id actual.
También se puede utilizar la constante SID para
recuperar el nombre y el session id de la sesión actual como una cadena
adecuada para añadir a las URLs.
session_is_registered
(PHP
4, PHP 5)
session_is_registered -- Comprueba si una variable está registrada en
la sesión
Descripción
bool
session_is_registered ( string nombre )
session_is_registered() devuelve TRUE si hay una
variable registrada en la sesión actual cuyo nombre es nombre.
Nota: Si
utiliza $_SESSION (o $HTTP_SESSION_VARS con PHP 4.0.6 o inferior), use isset()
para comprobar si una variable está registrada en $_SESSION.
Atención
Si
utiliza $HTTP_SESSION_VARS/$_SESSION, no use session_register(),
session_is_registered() ni session_unregister().
session_module_name
(PHP
4, PHP 5)
session_module_name -- Lee y/o cambia el módulo de la
sesión actual
Descripción
string
session_module_name ( [string módulo] )
session_module_name() devuelve el nombre del módulo de
la sesión actual. Si se especifica módulo, se usará ese módulo en su lugar.
session_name
(PHP 4, PHP 5)
session_name -- Lee y/o cambia el nombre de la sesión
actual
Descripción
string
session_name ( [string nombre] )
session_name() devuelve el nombre de la sesión actual.
Si se especifica un nombre, el nombre de de la sesión actual se cambia a este
valor.
El nombre de la sesión hace referencia al session id
utilizado en las cookies y en las URLs. Debería contener únicamente caracteres
alfanuméricos; también debería ser corto y descriptivo (p.ej. para usuarios con
los avisos de las cookies activados). El nombre de la sesión se restaura al
valor guardado por defecto en session.name al comenzar la petición. Así, pues,
es necesario llamar a session_name() en cada petición (y antes de llamar a
session_start() o a session_register()).
Ejemplo 1. Ejemplos de session_name()
<?php
// Cambiar el nombre de la sesión a
WebsiteID
$nombre_anterior
= session_name("WebsiteID");
echo "El anterior nombre de la sesión
era $nombre_anterior<p>";
?>
session_regenerate_id
(PHP
4 >= 4.3.2, PHP 5)
session_regenerate_id -- Actualizar el id de sesión actual con una
recién generada
Descripción
bool session_regenerate_id ( [bool
borrar_sesion_vieja] )
session_regenerate_id() reemplazará la id de sesión
actual con una nueva, y conservará la información de sesión actual.
Lista de parámetros
borrar_sesion_vieja
Indica si se
debe eliminar el archivo viejo de sesión asociado o no. Su valor predeterminado
es FALSE.
Valores retornados
Devuelve TRUE si todo se llevó a cabo correctamente,
FALSE en caso de fallo.
Registro de cambios
Versión Descripción
4.3.3 Desde
esta versión, si las cookies de sesión están habilitadas, el uso de
session_regenerate_id() también enviará una nueva cookie de sesión con el nuevo
id de sesión.
5.1.0 Se
agregó el parámetro borrar_sesion_vieja.
Ejemplos
Ejemplo 1. Un ejemplo de session_regenerate_id()
<?php
session_start();
$id_sesion_antigua
= session_id();
session_regenerate_id();
$id_sesion_nueva
= session_id();
echo "Sesión Vieja:
$id_sesion_antigua<br />";
echo "Sesión Nueva:
$id_sesion_nueva<br />";
print_r($_SESSION);
?>
session_register
(PHP 4, PHP 5)
session_register --
Registrar una o más variables globales con la sesión actual
Descripción
bool session_register ( mixed nombre [, mixed ...] )
session_register() acepta un número variable de
argumentos, cualquiera de los cuales puede ser o una cadena que contiene el
nombre de una variable, o una matriz que consista de nombres de variables u
otras matrices. Para cada nombre, session_register() registra la variable
global con ese nombre en la sesión actual.
Atención
Si desea que su script funcione independientemente de
register_globals, necesita usar en su lugar la matriz $_SESSION, dado que las
entradas de $_SESSION son registradas automáticamente. Si su script usa
session_register(), no funcionará en entornos en donde la directiva PHP
register_globals esté deshabilitada.
register_globals: Nota importante: Desde PHP 4.2.0 el valor por defecto
de la directiva register_globals es off. La comunidad PHP anima a todos a no
confiar en esta directiva y usar en su lugar superglobals.
Atención
Esto registra una variable global. Si desea registrar
una variable de sesión desde el interior de una función, necesita asegurarse de
hacerla global usando la palabra clave global o la matriz $GLOBALS[], o usar
las matrices de sesión especiales, como se anota a continuación.
Atención
Si está usando $_SESSION (o $HTTP_SESSION_VARS), no
use session_register(), session_is_registered(), ni session_unregister().
Esta función devuelve TRUE cuando todas las variables
son registradas satisfactoriamente en la sesión.
Si session_start() no fue llamada antes de que ésta
función sea llamada, se realizará un llamado implícito a session_start() sin
parámetro alguno. $_SESSION no imita este comportamiento y requiere
session_start() antes de su uso.
Puede crear también una variable de sesión,
simplemente definiendo el miembro apropiado de $_SESSION o la matriz
$HTTP_SESSION_VARS (PHP < 4.1.0).
<?php
// El uso de session_register() es considerado
obsoleto
$barney = "Un dinosaurio grande y violeta.";
session_register("barney");
// Se prefiere el uso de $_SESSION, a partir de PHP
4.1.0
$_SESSION["zim"] = "Un invasor de otro
planeta.";
// El modo antiguo era usar $HTTP_SESSION_VARS
$HTTP_SESSION_VARS["bob_esponja"] =
"Él tiene pantalones cuadrados.";
?>
Nota:
Actualmente es imposible registrar variables de recurso en una sesión. Por
ejemplo, no puede crear una conexión a una base de datos y almacenar la id de
conexión como una variable de sesión y esperar que la conexión aun sea válida
la próxima vez que la sesión sea restaurada. Las funciones PHP que devuelven un
recurso se identifican por tener un tipo de retorno de resource en su definicón
de función. Una lista de funciones que devuelven recursos está disponible en el
apéndice tipos de recurso.
Si $_SESSION
(o $HTTP_SESSION_VARS para PHP 4.0.6 o versiones anteriores) es usado, asigne
valores a $_SESSION. Por ejemplo: $_SESSION['var'] = 'ABC';
session_save_path
(PHP 4, PHP 5)
session_save_path -- Lee y/o cambia la ruta donde se
guardan los datos de la sesión actual
Descripción
string
session_save_path ( [string path] )
session_save_path() devuelve la ruta del directorio
usado actualmente para guardar los datos de la sesión. Si se especifica path,
se cambiará la ruta donde se guardan los datos.
Nota: En algunos sistemas operativos, puede que quiera especificar una ruta en un sistema de archivos que maneja muchos archivos pequeños de forma eficiente. Por ejemplo, en Linux, reiserfs puede dar un rendimiento mejor que ext2fs.
session_set_cookie_params
(PHP
4, PHP 5)
session_set_cookie_params -- Cambia los parámetros de la cookie de la
sesión
Descripción
void
session_set_cookie_params ( int duración [, string path [, string dominio [,
bool segura]]] )
Cambia los parámetros de la cookie definidos en el
archivo php.ini. El efecto de esta función sólo dura hasta que termina el
script.
Nota: El parámetro segura fue añadido en PHP 4.0.4.
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í.
}
}
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
?>
session_start
(PHP 4, PHP 5)
session_start -- Inicializar los datos de una sesión
Descripción
bool
session_start ( void )
session_start() crea una sesión (o la continúa
basandose en el session id pasado por GET o mediante una cookie).
Si desea usar una sesión con un nombre en concreto,
debe llamar a session_name() antes de llamar a session_start().
Esta función siempre devuelve TRUE.
Nota: Si
está usando sesiones basadas en las cookies, debe llamar a session_start()
antes de que haya ninguna salida al navegador.
session_start() registrará un manejador de salida
interno para la reescritura de las URL's si trans-sid está activado. Si un
usuario utiliza ob_gzhandler o algo como ob_start(), el orden del manejador de
salida es importante para que la salida sea la adecuada. Por ejemplo, el
usuario debe registrar ob_gzhandler antes de iniciar la sesión.
Nota: Se
recomienda utilizar zlib.output_compression en lugar de ob_gzhandler
session_unregister
(PHP 4, PHP 5)
session_unregister --
Desregistrar una variable de la sesión actual
Descripción
bool session_unregister ( string nombre )
session_unregister() desregistra (olvida) la variable
global llamada nombre de la sesión actual.
Esta función devuelve TRUE cuando la variable es
eliminada de la sesión correctamente.
Nota: Si utiliza $_SESSION (o $HTTP_SESSION_VARS con PHP 4.0.6 o inferior), use unset() para eliminar una variable de la sesión actual.
Atención
Esta función no borra la variable global
correspondiente a nombre, sólo evita que la variable sea guardada como parte de
la sesión. Debe llamar a unset() para eliminar la variable global
correspondiente.
Atención
Si está trabajando con $HTTP_SESSION_VARS/$_SESSION,
no utilice session_register(), session_is_registered() ni session_unregister().
session_unset
(PHP 4, PHP 5)
session_unset --
Elimina todas las variables de la sesión
Descripción
void session_unset ( void )
La función session_unset() elimina y libera el espacio
ocupado por todas las variables de la sesión actual registradas.
Nota: Si utiliza $_SESSION (o $HTTP_SESSION_VARS con PHP 4.0.6 o inferior), use unset() en su lugar para desregistrar una variable de la sesión. p.ej. $_SESSION = array();
session_write_close
(PHP
4 >= 4.0.4, PHP 5)
session_write_close -- Escribe los datos de la sesión
y la finaliza
Descripción
void
session_write_close ( void )
Finaliza la sesión actual y guarda sus datos
Los datos de la sesió se suelen guardar tras finalizar la
ejecución de su script sin necesidad de llamar a session_write_close(), pero
como los datos de la sesió están bloqueados para evitar escrituras
concurrentes, sólo un script puede trabajar con una sesión a la vez. Cuando se
usan framesets junto con sesiones, podrá comprobar que los frames se cargan uno
a uno debido a este bloqueo. Puede reducir el tiempo necesario para cargar los
frames finalizando la sesión tan pronto como haya terminado los cambios a las
variables de la sesión.
Gracias muy completo tu articulo, me sirvió bastante
ResponderEliminar