Conceptos básicos sobre las cookies

Una cookie es un fragmento de datos almacenado en el navegador que se usa para conservar el estado y otra información que un sitio web necesita para ejecutar sus funciones.

Una cookie es un archivo pequeño que los sitios web almacenan en la máquina de sus usuarios. La información que almacena viaja de ida y vuelta entre el navegador y el sitio web.

Cada cookie es un par clave-valor junto con una serie de atributos que controlan cuándo y dónde se usa. Estos atributos se usan para establecer elementos como fechas de vencimiento o indicar que la cookie solo debe enviarse a través de HTTPS. Puedes configurar una cookie en un encabezado HTTP o a través de la interfaz de JavaScript.

Las cookies son uno de los métodos disponibles para agregar un estado persistente a los sitios web. Con el paso de los años, sus capacidades crecieron y evolucionaron, pero dejaron a la plataforma con algunos problemas heredados problemáticos. Para solucionar este problema, los navegadores (como Chrome, Firefox y Edge) están cambiando su comportamiento para aplicar más valores predeterminados que preserven la privacidad.

Cookies en acción

Supongamos que tienes un blog en el que deseas mostrar una promoción de "Novedades" a tus usuarios. Los usuarios pueden descartar la promoción y no volver a verla durante un tiempo. Puedes almacenar esa preferencia en una cookie, establecer que venza en un mes (2,600,000 segundos) y solo enviarla a través de HTTPS. Ese encabezado se vería así:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Tres cookies que se envían a un navegador desde un servidor en una respuesta
Los servidores establecen cookies con el encabezado Set-Cookie.

Cuando tu lector vea una página que cumpla con esos requisitos (tiene una conexión segura y la cookie tiene menos de un mes), su navegador enviará este encabezado en su solicitud:

Cookie: promo_shown=1
Tres cookies que se envían de un navegador a un servidor en una solicitud
Tu navegador vuelve a enviar cookies en el encabezado Cookie.

También puedes agregar y leer las cookies disponibles para ese sitio en JavaScript con document.cookie. Si realizas una asignación a document.cookie, se creará o anulará una cookie con esa clave. Por ejemplo, puedes probar lo siguiente en la consola de JavaScript de tu navegador:

→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"

Si lees document.cookie, se mostrarán todas las cookies a las que se puede acceder en el contexto actual, con cada cookie separada por un punto y coma:

→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
JavaScript accede a las cookies dentro del navegador
JavaScript puede acceder a las cookies con document.cookie.

Si pruebas esto en una selección de sitios populares, notarás que la mayoría de ellos establece significativamente más que solo tres cookies. En la mayoría de los casos, esas cookies se envían en cada solicitud a ese dominio, lo que tiene varias implicaciones. A menudo, el ancho de banda de carga es más restringido que el de descarga para los usuarios, por lo que la sobrecarga de todas las solicitudes salientes agrega un retraso en el tiempo hasta el primer byte. Sé conservador con la cantidad y el tamaño de las cookies que configures. Usa el atributo Max-Age para garantizar que las cookies no permanezcan más tiempo del necesario.

¿Qué son las cookies propias y de terceros?

Si vuelves a esa misma selección de sitios que estabas viendo antes, es probable que hayas notado que había cookies presentes para una variedad de dominios, no solo para el que estabas visitando. Las cookies que coinciden con el dominio del sitio actual, es decir, lo que se muestra en la barra de direcciones del navegador, se denominan cookies propias. Del mismo modo, las cookies de dominios distintos del sitio actual se denominan cookies de terceros. Esta no es una etiqueta absoluta, sino que está relacionada con el contexto del usuario. La misma cookie puede ser de origen o de terceros, según el sitio en el que se encuentre el usuario en ese momento.

Se envían tres cookies a un navegador desde diferentes solicitudes en la misma página
Las cookies pueden provenir de una variedad de dominios diferentes en una página.

Siguiendo con el ejemplo anterior, supongamos que una de tus entradas de blog contiene la foto de un gato particularmente sorprendente y se aloja en /blog/img/amazing-cat.png. Como es una imagen increíble, otra persona la usa directamente en su sitio. Si un visitante visitó tu blog y tiene la cookie promo_shown, cuando vea amazing-cat.png en el sitio de la otra persona, esa cookie se enviará en esa solicitud de la imagen. Esto no es particularmente útil para nadie, ya que promo_shown no se usa para nada en el sitio de esta otra persona, solo agrega sobrecarga a la solicitud.

Si ese es un efecto no deseado, ¿por qué querrías hacerlo? Es este mecanismo el que permite que los sitios mantengan el estado cuando se usan en un contexto de terceros. Por ejemplo, si incorporas un video de YouTube en tu sitio, los visitantes verán la opción “Ver más tarde” en el reproductor. Si el visitante ya accedió a YouTube, una cookie de terceros pone esa sesión a disposición del reproductor incorporado, lo que significa que el botón “Ver más tarde” solo guardará el video de una vez, en lugar de pedirle que acceda o de tener que dirigirlo fuera de tu página y volver a YouTube.

La misma cookie se envía en tres contextos diferentes
Se envía una cookie en un contexto de terceros cuando se visitan diferentes páginas.

Una de las propiedades culturales de la Web es que tiende a ser abierta de forma predeterminada. Esto es parte de lo que permitió que tantas personas crearan su propio contenido y apps allí. Sin embargo, esto también generó varias inquietudes sobre la seguridad y la privacidad. Los ataques de falsificación de solicitudes entre sitios (CSRF) se basan en el hecho de que las cookies se adjuntan a cualquier solicitud a un origen determinado, sin importar quién inicie la solicitud. Por ejemplo, si visitas evil.example, se pueden activar solicitudes a your-blog.example, y tu navegador adjuntará con gusto las cookies asociadas. Si tu blog no tiene cuidado con la forma en que valida esas solicitudes, evil.example podría activar acciones como borrar publicaciones o agregar su propio contenido.

Los usuarios también están tomando conciencia de cómo se pueden usar las cookies para hacer un seguimiento de su actividad en varios sitios. Sin embargo, hasta ahora no había una manera de indicar tu intent de forma explícita con la cookie. Tu cookie promo_shown solo debe enviarse en un contexto propio, mientras que una cookie de sesión para un widget destinado a incorporarse en otros sitios está ahí intencionalmente para proporcionar el estado de acceso en un contexto de terceros.

Puedes indicar tu intención de forma explícita con una cookie si configuras el atributo SameSite adecuado.

Para identificar tus cookies propias y establecer los atributos adecuados, consulta Recetas de cookies propias.