W3docs

Cookies en PHP

Las cookies en PHP son pequeños archivos de texto almacenados en el cliente que guardan datos sobre el comportamiento y preferencias del usuario.

Introducción a las cookies en PHP

Las cookies en PHP son pequeños archivos de texto almacenados en el lado del cliente que contienen datos sobre el comportamiento y las preferencias del usuario. Se utilizan ampliamente para almacenar información como preferencias del usuario, contenidos del carrito de compras o identificadores de sesión.

En este artículo, profundizaremos en los conceptos básicos de las cookies en PHP y cómo pueden implementarse en un sitio web.

¿Qué son las cookies en PHP?

Una cookie es un pequeño fragmento de datos almacenado por un sitio web en el dispositivo del usuario. A diferencia de las sesiones del lado del servidor, las cookies residen completamente en el cliente, lo que las hace ideales para datos ligeros y persistentes como preferencias o tokens de seguimiento. PHP crea cookies usando la función setcookie() y accede a ellas mediante el array superglobal $_COOKIE. La función setcookie() acepta varios argumentos, incluidos el nombre de la cookie, el valor, el tiempo de expiración, la ruta, el dominio y los indicadores de seguridad.

Cómo funciona en la práctica:

  1. El servidor envía una cookie. Cuando llamas a setcookie(), PHP añade una cabecera de respuesta HTTP Set-Cookie. El navegador almacena la cookie.
  2. El navegador la devuelve. En cada solicitud posterior al mismo dominio, el navegador adjunta automáticamente la cookie en la cabecera de solicitud Cookie.
  3. PHP la lee. PHP analiza las cookies entrantes en el array $_COOKIE, por lo que puedes leerlas en la siguiente carga de página.

Cookies vs. Sesiones

CookiesSesiones
Dónde viven los datosCliente (navegador)Servidor
Sobrevive al reinicio del navegadorSí (si expire es en el futuro)Solo con una cookie de sesión persistente
Límite de tamaño~4 KB por cookieLimitado por el almacenamiento del servidor
Adecuado paraPreferencias, "recuérdame", indicadores no sensiblesEstado de inicio de sesión, datos sensibles

Usa cookies para datos pequeños y no sensibles que deben persistir en el cliente. Usa sesiones cuando los datos sean sensibles o de gran tamaño.

Creación de cookies en PHP

Para crear una cookie en PHP, usa la función setcookie(). La sintaxis básica de la función setcookie() es la siguiente:

Sintaxis de la función setcookie en PHP

setcookie(name, value, expire, path, domain, secure, httponly);

Donde:

  • name es el nombre de la cookie
  • value es el valor que se almacenará en la cookie
  • expire es el tiempo tras el cual la cookie expirará
  • path es la ruta en el servidor en la que estará disponible la cookie
  • domain es el nombre de dominio del sitio web
  • secure indica si la cookie debe enviarse solo a través de una conexión segura (HTTPS)
  • httponly indica si la cookie debe estar oculta para JavaScript (document.cookie), lo que ayuda a proteger contra ataques XSS

Aquí tienes un ejemplo de cómo crear una cookie en PHP:

Ejemplo simple en PHP de cómo añadir una cookie

setcookie("user", "John Doe", time() + 3600, "/");

Este código crea una cookie llamada user con un valor de John Doe que expira en una hora (time() devuelve la marca de tiempo Unix actual en segundos, así que añadir 3600 establece la expiración una hora después). La ruta "/" hace que la cookie esté disponible en todo el sitio web.

Advertencia

setcookie() envía una cabecera HTTP, por lo que debe llamarse antes de cualquier salida — sin HTML, espacios en blanco ni echo antes. Si la salida ya ha comenzado, obtendrás una advertencia "headers already sent" y la cookie no se establecerá. Consulta headers_sent() para saber cómo detectar esto.

La sintaxis moderna de array (PHP 7.3+)

Desde PHP 7.3 puedes pasar un array de opciones en lugar de argumentos posicionales. Esta es la forma recomendada porque permite establecer samesite, que controla si la cookie se envía en solicitudes entre sitios (una defensa clave contra CSRF):

setcookie("user", "John Doe", [
    "expires" => time() + 3600,
    "path" => "/",
    "secure" => true,     // only over HTTPS
    "httponly" => true,   // not readable by JavaScript
    "samesite" => "Lax",  // "Strict", "Lax", or "None"
]);

Recuperación de cookies en PHP

Una vez que se ha creado una cookie, su valor puede recuperarse usando el array superglobal $_COOKIE. La sintaxis básica para acceder al valor de una cookie es la siguiente:

PHP cómo obtener el valor de una cookie

$_COOKIE['name'];

Donde name es el nombre de la cookie.

Aquí tienes un ejemplo de cómo recuperar el valor de una cookie:

PHP cómo acceder al valor de una cookie

if (isset($_COOKIE["user"])) {
    echo "Welcome back, " . $_COOKIE["user"];
} else {
    echo "Welcome, guest!";
}

Siempre comprueba isset() antes de leer una cookie. Una cookie establecida en la solicitud actual no está disponible en $_COOKIE hasta la siguiente carga de página, porque el navegador solo la envía de vuelta en la siguiente solicitud. Leer una cookie recién establecida en el mismo script no devuelve nada.

Información

Los valores de las cookies llegan como entrada de usuario no confiable — cualquiera puede editarlos en su navegador. Valídalos y saneálos antes de usarlos, por ejemplo con filter_var(). Nunca confíes en el valor de una cookie solo para tomar decisiones de autorización.

Actualización de cookies en PHP

Para actualizar una cookie en PHP, simplemente crea una nueva cookie con el mismo nombre y un nuevo valor. El tiempo de expiración también debe actualizarse para garantizar que la cookie siga persistiendo.

Aquí tienes un ejemplo de cómo actualizar una cookie en PHP:

Ejemplo de cómo actualizar una cookie

setcookie("user", "Jane Doe", time()+3600, "/", "", 0, 0);

Este código actualiza la cookie user con un nuevo valor de Jane Doe y extiende su tiempo de expiración otra hora más.

Eliminación de cookies en PHP

Para eliminar una cookie en PHP, simplemente crea una nueva cookie con el mismo nombre y un tiempo de expiración en el pasado. Esto hará que la cookie se elimine automáticamente del dispositivo del usuario.

Aquí tienes un ejemplo de cómo eliminar una cookie en PHP:

Ejemplo de cómo eliminar una cookie

setcookie("user", "", time()-3600, "/", "", 0, 0);

Este código crea una nueva cookie user con un tiempo de expiración que es una hora en el pasado. Esto hará que la cookie se elimine automáticamente del dispositivo del usuario.

Advertencia

Para eliminar una cookie debes pasar la misma path (y domain) que usaste al crearla. Una cookie establecida con la ruta /account es una cookie diferente a la establecida con la ruta /, y limpiar la ruta incorrecta deja la original en su lugar.

Un ejemplo completo: Recordar una preferencia de tema

Combinando todo, aquí hay un pequeño script que permite a un visitante elegir un tema de color y lo recuerda entre visitas usando una cookie:

<?php
// 1. Save the choice when the form is submitted
if (isset($_POST["theme"])) {
    setcookie("theme", $_POST["theme"], time() + 60 * 60 * 24 * 30, "/"); // 30 days
    // Reload so the new cookie is available to $_COOKIE
    header("Location: " . $_SERVER["PHP_SELF"]);
    exit;
}

// 2. Read the saved choice (default to "light")
$theme = isset($_COOKIE["theme"]) ? $_COOKIE["theme"] : "light";
?>
<p>Current theme: <?= htmlspecialchars($theme) ?></p>

<form method="post">
    <button name="theme" value="light">Light</button>
    <button name="theme" value="dark">Dark</button>
</form>

Observa cómo el script redirige después de guardar para que la cookie recién establecida se lea en la siguiente solicitud, y cómo htmlspecialchars() escapa el valor antes de imprimirlo. Consulta el manejo de formularios en PHP para más información sobre cómo procesar datos $_POST de forma segura.

Ventajas del uso de cookies en PHP

Las cookies en PHP tienen varias ventajas, entre ellas:

  1. Mejor experiencia de usuario: Las cookies permiten a los sitios web almacenar información específica del usuario, como preferencias y credenciales de inicio de sesión, que pueden usarse para ofrecer una experiencia de usuario más personalizada.
  2. Datos persistentes: Las cookies permiten a los sitios web almacenar datos en el dispositivo del usuario, que pueden persistir incluso después de que el usuario cierre el navegador o apague su dispositivo. Esto hace posible que los sitios web recuerden las preferencias y credenciales de inicio de sesión de un usuario en múltiples visitas.
  3. Implementación sencilla: Las cookies en PHP son fáciles de implementar y pueden usarse para almacenar una amplia variedad de datos, lo que las convierte en una herramienta versátil para los desarrolladores web.

Mejores prácticas para el uso de cookies en PHP

Para garantizar la mejor experiencia de usuario posible y la seguridad, es importante seguir las mejores prácticas al usar cookies en PHP. Algunas de estas mejores prácticas incluyen:

  1. Usar conexiones seguras: Siempre que sea posible, usa conexiones seguras (HTTPS) al crear y acceder a las cookies. Esto ayudará a proteger los datos almacenados en las cookies de ser interceptados por terceros.
  2. Almacenar datos sensibles de forma segura: No almacenes datos sensibles, como credenciales de inicio de sesión o contraseñas, en cookies. Dado que las cookies se almacenan en el lado del cliente, son vulnerables al robo o manipulación. Usa sesiones del lado del servidor ($_SESSION) para datos de autenticación sensibles.
  3. Usar nombres de cookie únicos: Usa nombres únicos y descriptivos para tus cookies para evitar conflictos con otras cookies usadas por tu sitio web u otros sitios web.
  4. Limitar la cantidad de datos almacenados: Limita la cantidad de datos almacenados en las cookies a solo lo necesario. Las grandes cantidades de datos pueden ralentizar el rendimiento del sitio web y aumentar el riesgo de filtraciones de datos.

Conclusión

Las cookies en PHP son una herramienta poderosa para los desarrolladores web, que les permite almacenar y recuperar datos en el dispositivo del usuario. Siguiendo las mejores prácticas y teniendo en cuenta la seguridad, las cookies en PHP pueden usarse para ofrecer una mejor experiencia de usuario y aumentar la funcionalidad del sitio web.

Práctica

Práctica
¿Qué es verdad sobre las cookies en PHP según la información de la página?
¿Qué es verdad sobre las cookies en PHP según la información de la página?
Was this page helpful?