Cookies en PHP
Una cookie es un pequeño dato que el servidor guarda en el navegador del usuario. Sirve para recordar información entre visitas: sesiones, preferencias, contador de visitas, etc.
Creando cookies
PHP usa la función setcookie()
para crear cookies. Debe llamarse antes de cualquier salida (como echo, HTML, etc.), ya que se envía en las cabeceras HTTP.
<?php
setcookie("saludo", "hola");
?>
Esto crea una cookie saludo
con valor hola
, que dura hasta cerrar el navegador.
Sintaxis moderna (PHP 7.3+)
<?php
setcookie("visitas", "1", [
"expires" => time() + 86400,
"path" => "/",
"secure" => true,
"httponly" => true,
"samesite" => "Strict",
]);
?>
Más legible y segura. Permite definir SameSite
, útil contra ataques CSRF.
Valores y codificación
El valor debe ser texto plano. Usa urlencode()
si contiene espacios u otros caracteres especiales.
setcookie(urlencode("nombre usuario"), urlencode("Juan Pérez"));
Duración de una cookie
// 1 hora
setcookie("visitas", "1", time() + 3600);
// 1 día
setcookie("visitas", "1", time() + 86400);
// 1 semana
setcookie("visitas", "1", time() + (7 * 86400));
// 1 año
setcookie("visitas", "1", time() + 31536000);
Path y dominio
// Cookie válida en todo el sitio
setcookie("tema", "oscuro", time() + 86400, "/");
// Solo en /blog/
setcookie("tema", "oscuro", time() + 86400, "/blog/");
// Para todo *.ejemplo.com
setcookie("tema", "oscuro", time() + 86400, "/", "ejemplo.com");
Leer cookies
if (isset($_COOKIE["saludo"])) {
echo $_COOKIE["saludo"];
} else {
echo "No hay cookie";
}
Nota: no se puede leer una cookie recién creada. Hay que recargar la página.
Eliminar cookies
setcookie("saludo", "", time() - 3600, "/");
Debes usar el mismo path
y domain
que cuando se creó, o no funcionará.
Cookies como arrays
setcookie("usuario[nombre]", "Ana", time() + 86400);
setcookie("usuario[edad]", "25", time() + 86400);
// Leer:
echo $_COOKIE["usuario"]["nombre"];
Seguridad
- No almacenes datos sensibles en cookies.
- Usa
secure
yhttponly
siempre que sea posible. - Define
samesite
como"Strict"
o"Lax"
. setcookie()
devuelvetrue
si se llama correctamente, pero no garantiza que el navegador la acepte.
Lectura adicional
Consentimiento de cookies: ¿por qué tantas webs lo piden?
Desde 2009, y especialmente desde la entrada en vigor del Reglamento General de Protección de Datos (RGPD) y la Directiva ePrivacy, las webs europeas deben pedir consentimiento antes de almacenar o acceder a ciertas cookies en el dispositivo del usuario.
No todas las cookies requieren consentimiento. Según el artículo 5.3 de la Directiva 2002/58/CE (modificada por la 2009/136/CE):
«Se permitirá el almacenamiento de información o el acceso a información ya almacenada en el equipo terminal de un usuario (...) solamente a condición de que el usuario haya dado su consentimiento, tras haber recibido información clara y completa».
Cookies que no necesitan consentimiento
Se pueden usar sin pedir permiso las cookies que sean estrictamente necesarias para:
- Guardar productos en el carrito de una compra.
- Iniciar sesión y mantener sesiones activas.
- Recordar preferencias de idioma o presentación cuando son solicitadas explícitamente.
Estas cookies se consideran técnicas y no invasivas. Por eso, **no requieren aviso ni consentimiento** previo, aunque sí es recomendable mencionarlas en una política de cookies.
Cookies que sí requieren consentimiento
En cambio, es obligatorio pedir permiso antes de usar cookies para:
- Publicidad personalizada o seguimiento entre sitios.
- Analítica (como Google Analytics), salvo que esté debidamente anonimizada.
- Redes sociales (botones de compartir, login con terceros...)
Este consentimiento debe ser claro, informado y otorgado antes de que se activen dichas cookies, lo que ha dado lugar a la aparición de los conocidos banners de cookies.
Nota: Aunque la normativa europea es la más estricta, muchos sitios fuera de Europa también aplican estos avisos por precaución o por servir a usuarios de la UE.