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ícate

Las 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.
Empezar curso de PHP

Lecciones de este módulo de PHP

Lecciones de programación del módulo Sesiones y cookies del curso de PHP.