PHP: Sesiones y cookies
Aprende a manejar sesiones y cookies en PHP para mantener estados de usuario y preferencias de forma segura. Descubre cómo configurar, leer y eliminar estos datos según las mejores prácticas de seguridad y rendimiento.
Aprende PHP GRATIS y certifícateLas sesiones y las cookies son mecanismos esenciales para retener información entre diferentes peticiones en aplicaciones web. En PHP, ambos se usan para personalizar la experiencia del usuario y preservar datos, como credenciales de inicio de sesión o configuraciones específicas, a lo largo de la navegación.
Sesiones en PHP
Las sesiones son archivos de servidor en los que se almacena información vinculada a un cliente concreto. Cada sesión está identificada por un ID único que se asocia con el cliente mediante una cookie.
Creación y configuración de sesiones
Antes de acceder o modificar datos de sesión, se llama a la función session_start()
:
<?php
session_start(); // Inicia o reanuda la sesión
$_SESSION["usuario"] = "Carlos";
$_SESSION["rol"] = "Administrador";
echo "Sesión creada para el usuario: " . $_SESSION["usuario"];
?>
session_start()
debe ser la primera instrucción del script, sin que exista salida previa en el navegador.- La variable superglobal
$_SESSION
permite almacenar información que persiste mientras dure la sesión.
Recuperación y eliminación de datos de sesión
Para obtener datos almacenados, se recurre a $_SESSION
en cualquier archivo que haya invocado session_start()
:
<?php
session_start();
if (isset($_SESSION["usuario"])) {
echo "Bienvenido, " . $_SESSION["usuario"];
} else {
echo "Sesión no iniciada.";
}
?>
Para eliminar variables de sesión concretas, se puede usar unset()
:
<?php
unset($_SESSION["rol"]); // Elimina la variable 'rol' de la sesión
?>
Si se desea finalizar por completo la sesión, se llaman las siguientes funciones:
<?php
session_start();
session_unset(); // Limpia todas las variables de sesión
session_destroy(); // Destruye la sesión
?>
Uso de cookies en PHP
Las cookies se guardan en el navegador del usuario y permiten recordar preferencias u otra información específica. A diferencia de las sesiones, estos datos se mantienen en el cliente y tienen una fecha de caducidad.
Creación de cookies
Para crear una cookie, PHP ofrece la función setcookie()
:
<?php
$nombreCookie = "preferencias";
$valorCookie = "tema=oscuro";
$tiempoExpiracion = time() + (60 * 60 * 24); // 1 día
setcookie($nombreCookie, $valorCookie, $tiempoExpiracion, "/");
echo "Cookie 'preferencias' creada.";
?>
- El primer parámetro es el nombre de la cookie.
- El segundo es el valor.
- El tercero define la expiración, en este caso, 24 horas desde el momento actual.
- El último argumento indica la ruta en la que la cookie será válida (
"/"
para todo el sitio).
Lectura de cookies
Las cookies se acceden mediante la variable superglobal $_COOKIE
:
<?php
if (isset($_COOKIE["preferencias"])) {
echo "Tus preferencias: " . $_COOKIE["preferencias"];
} else {
echo "No se han definido preferencias.";
}
?>
Eliminación de cookies
Para eliminar una cookie, se le asigna una fecha de caducidad pasada:
<?php
setcookie("preferencias", "", time() - 3600, "/");
echo "Cookie 'preferencias' eliminada.";
?>
Consideraciones de seguridad
- HTTPS: Emplear protocolos seguros (HTTPS) evita la captura de cookies y los ataques de tipo sniffing.
- HttpOnly: Al establecer una cookie, usar la bandera
HttpOnly
para impedir que sea accesible desde scripts del lado del cliente y así disminuir el riesgo de ataques XSS. - Regenerar ID de sesión: Tras iniciar sesión, es aconsejable renovar el ID de la sesión con
session_regenerate_id(true)
para mitigar ataques de fijación de sesión. - Validar datos: Verificar la validez de la información en la sesión o las cookies antes de utilizarla en cualquier proceso sensible (como transacciones).
Buenas prácticas finales
- Almacena solo los datos imprescindibles en cookies, ya que viajan en cada petición y pueden afectar el rendimiento.
- Emplea las sesiones para información sensible, como detalles de autenticación, ya que reside en el servidor y es menos vulnerable a manipulaciones.
- Cierra las sesiones cuando el usuario cierre sesión o si ha pasado un tiempo prolongado de inactividad, para prevenir accesos no autorizados.
- Mantén una estructura clara en tu proyecto, diferenciando controladores de sesión, lógica de negocio y presentación.
Lecciones de este módulo de PHP
Lecciones de programación del módulo Sesiones y cookies del curso de PHP.