/
HTTP

Sesiones - cookies del servidor en PHP

06. 11. 2019

Obsah článku

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.

Iniciar una sesión

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

Seguridad de la sesión

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

Recuperación de datos de una sesión

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.';
}

Guardar datos en la sesión

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.

Eliminación de sesiones

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

Validez máxima de la sesión

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:

Uso en PHP:

// el servidor mantendrá ahora la sesión hasta 3600 segundos = 1 hora
ini_set('session.gc_maxlifetime', '3600');
// todos los clientes (navegadores) serán
// sesión enviada con una validez de exactamente 3600 segundos
session_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:

Související články

1.
5.