A menudo necesitamos almacenar más información en cookies, pero el límite máximo para las cookies es de 4 kB, que no es mucho. Sessions resuelve este problema almacenando los datos en el servidor web, y sólo almacena un breve identificador en el navegador del cliente para saber qué datos pertenecen a cada cliente.
Antes de realizar cualquier trabajo con las sesiones, debemos iniciarlas. Esto se hace llamando a la función session_start()
justo al principio del script:
session_start();
Advertencia fuerte: ¡no se debe ejecutar ninguna salida a código HTML antes de llamar a la función
session_start()
!
El contenido de la sesión se almacena en el servidor y sólo se envía el identificador al navegador del cliente, por lo que el usuario no tiene forma de saber qué se almacena en la sesión. La única forma en que el script puede afectar al usuario es borrando el identificador (con lo que el script generará uno nuevo).
Todas las sesiones se almacenan en la variable superglobal $_SESSION
y pueden ser recorridas como un array.
Por ejemplo, el nombre del usuario que ha iniciado la sesión puede obtenerse escribiendo
echo $_SESSION['usuario'];
Nota: La sesión puede no existir siempre (por ejemplo, si es un usuario nuevo). Por lo tanto, siempre debemos comprobar la existencia antes de cualquier listado y ofrecer un mensaje de error alternativo si es necesario.
if (isset($_SESSION['usuario']) && $_SESSION['usuario']) {echo 'Usuario registrado:' . $_SESSION['usuario'];} else {echo 'No se ha registrado nadie.';}
El guardado se realiza como un simple guardado de datos en una variable:
$_SESSION['usuario'] = 'Honzik';
El servidor web se encargará de la provisión técnica del correcto almacenamiento en el servidor y del envío del identificador al usuario.
Los valores individuales se pueden borrar por separado según la clave:
unset($_SESSION['usuario']);
O bien todas las sesiones disponibles:
unset($_SESSION);
Nota: La eliminación de una sesión específica no vacía el valor de la clave, sino que la elimina por completo. Por lo tanto, se lanzará una advertencia de error cuando se intente leer una clave inexistente. La existencia de una clave siempre se puede verificar fácilmente con la función
isset()
.
Cada sesión guardada tiene un límite de tiempo de almacenamiento en el servidor. PHP contiene directamente un script cron que borra periódicamente las sesiones antiguas.
El valor por defecto suele ser 1440 segundos
, que son 24 minutos
.
El aumento del valor debe hacerse en 2 lugares:
php.ini
se establece la longitud máxima de validez que mantendrá el servidor. El valor lo establece la directiva session.gc_maxlifetime
,Uso en PHP:
// el servidor mantendrá ahora la sesión hasta 3600 segundos = 1 horaini_set('session.gc_maxlifetime', '3600');// todos los clientes (navegadores) serán// sesión enviada con una validez de exactamente 3600 segundossession_set_cookie_params(3600);session_start(); // ¡podemos empezar la sesión!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | es