Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Cookies Protocolo HTTP

Mecanismo de las cookies

Inicialmente, trabajar con HTTP no era muy sencillo. El problema radica en que es un protocolo sin estado, lo que significa que cada solicitud-respuesta no está relacionada con la solicitud-respuesta anterior. Esto resultaba incómodo porque a veces necesitamos recordar información, como la autenticación del usuario o los productos en su carrito de compras en una tienda en línea.

Aquí es donde surge el problema: "¿Cómo recordar que este es el usuario con el que acabamos de interactuar?". La solución a este problema se encontró cuando se inventó el mecanismo llamado cookie.

En esta lección, vamos a entender qué son las cookies y cómo funcionan.

Cómo funcionan las cookies

Vamos a hacer una solicitud al sitio web de Códica y ver cómo funciona este mecanismo. Vamos a utilizar el programa curl. Este programa nos permite hacer solicitudes HTTP y controlar varios parámetros con banderas. Al trabajar con curl, no es necesario establecer una conexión previa y luego escribir una solicitud en bruto. Basta con definir los parámetros y curl enviará automáticamente todos los encabezados de solicitud necesarios, incluyendo los de HTTPS.

Vamos a hacer una solicitud para obtener solo los encabezados, para ello agregaremos la bandera --head al comando curl:

curl --head https://app.codica.la

HTTP/2 200
server: nginx/1.19.1
date: Jue, 16 Jul 2020 03:38:11 GMT
content-type: text/html; charset=utf-8
vary: Accept-Encoding
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-download-options: noopen
x-permitted-cross-domain-policies: none
referrer-policy: strict-origin-when-cross-origin
strict-transport-security: max-age=0
x-frame-options: ALLOW-FROM https://webvisor.com
etag: W/"eb99fa0d6ee702b85ba2a5e9b0425aea"
cache-control: max-age=0, private, must-revalidate
content-security-policy:
set-cookie: _codica_session2=AiUPd6RFbcrnoGnZSLAYSBzdJqxsQ4sTc%2BW0xXuOKzlenyv5GwkkbpdkD6IVDybDl
D8vQcOcgGax98%2FmzIBJrz9f%2BDIJxWRpknZsRSfBXuC9yRfndovBUG6w4fTql4qp7zPozd2veFDLOU4koPVYiUQxgBLM6
NkyYg%2Bhs%2BQe%2FSZezleVgMBVD%2FFC070DjV7t2eN01o26kcbd0pQsf9k1LE4JN0aDzSxu8elxLyAWkIJ5l3m%2BcI%
2BpgOxk87Uwh9WdTHVuDaraiRaVJz1aZq5hr%2FgzaZiK%2Bgi6ChX60nhha1an610b1v3EE7xgkEM332uFPU0w675fHEr4A
PTdPDVtJRa3--qQi0cqcljC8i4klD--fXTErw9bhX7%2Fd1xfPE4Gww%3D%3D; domain=.codica.io; path=/; 
expires=Sun, 16 Aug 2020 03:38:11 GMT; secure; HttpOnly; SameSite=Lax
set-cookie: GCLB=CLTE8bzdlaS6Zg; path=/; HttpOnly; expires=Thu, 16-Jul-2020 03:39:50 GMT
x-request-id: 2f554de2-a21d-4e7d-964e-085914ac3f77
x-runtime: 0.056974
access-control-allow-origin: *
via: 1.1 google
alt-svc: clear

Vemos dos encabezados que se encargan de establecer las cookies: set-cookie. Observa que cada cookie se envía en un encabezado separado. Puede haber varios de estos encabezados.

Internamente, una cookie es un par clave=valor y se separa de los parámetros adicionales por punto y coma. Las cookies se almacenan en el navegador del cliente y se envían de vuelta al servidor en la siguiente solicitud. No se utilizan directamente en el navegador.

Una buena analogía sería obtener un número en el guardarropa y luego devolverlo para saber cuál es tu chaqueta. Sin embargo, el número en sí no tiene ningún valor y no se puede utilizar por sí solo.

Las cookies se dividen en al menos dos tipos: cookies de sesión y cookies permanentes.

Cookies de sesión

En nuestra solicitud, no se establecen las cookies de sesión, ya que vemos parámetros adicionales en el encabezado set-cookie. Si no hubiera parámetros adicionales, la cookie se llamaría cookie de sesión. La principal diferencia entre las cookies de sesión y las permanentes es que las cookies de sesión se eliminan cuando se cierra el navegador. Un ejemplo claro de esto es el mecanismo de la casilla de verificación "Recordarme". Si inicias sesión y no marcas esta casilla, y luego cierras el navegador y vuelves al sitio web, no estarás autenticado. Esto ocurre porque se utiliza una cookie de sesión.

Cookies permanentes

Tiempo de vida de las cookies

Volviendo a la solicitud anterior, en este caso se establecen las cookies permanentes. Se almacenan en el disco duro, y el lugar de almacenamiento puede variar según el navegador. Estas cookies se diferencian de las cookies de sesión en que se puede controlar su duración mediante el parámetro expires:

expires=Thu, 16-Jul-2020 03:39:50 GMT;

El parámetro expires indica la fecha en la que se eliminará la cookie y ya no se enviará al servidor. Cabe mencionar que hay otro parámetro que se utiliza para el mismo propósito: MAX-AGE. Este parámetro especifica la cantidad de segundos después de los cuales se eliminará la cookie:

MAX-AGE=2592000;

Dado que algunos navegadores no admiten MAX-AGE, algunos frameworks a menudo establecen ambos parámetros y los navegadores simplemente ignoran el que no necesitan. Por lo tanto, se considera válido un encabezado set-cookie que contiene ambos parámetros MAX-AGE y expires. Además, el estándar establece que el nombre de la cookie no distingue entre mayúsculas y minúsculas.

Parámetros de dominio y ruta

También se pueden establecer varios parámetros adicionales. Los parámetros domain y path definen el ámbito de la cookie, es decir, la URL a la que se puede enviar la cookie. Si no se establecen, la cookie se enviará al servidor solo para la ruta y el dominio actual de forma predeterminada. En nuestro ejemplo, se establece la raíz del sitio web en path, lo que significa que la cookie se enviará para todas las páginas:

domain=.codica.la; path=/;

Ten en cuenta un detalle importante en este ejemplo. Si se establece domain=.codica.la, la cookie funcionará no solo para todas las páginas del sitio web, sino también para todos los subdominios, y el punto antes del nombre de dominio no importa. Si no establecemos el parámetro domain, la cookie no funcionará para los subdominios, aunque el valor predeterminado del dominio sea codica.la.

La unicidad de una cookie se determina por tres parámetros: clave (nombre de la cookie), domain y path. Esto significa que si necesitamos restablecer una cookie, los próximos encabezados set-cookie deben coincidir con estos parámetros. Si al menos uno de ellos es diferente, se establecerá una nueva cookie.

Eliminación de cookies

No existe un encabezado para eliminar una cookie. Para eliminarla, debes establecer MAX-AGE en cero o en un valor negativo, o establecer expires en el pasado, de modo que la cookie se elimine de inmediato.

Puedes notar que en nuestro ejemplo se establece un parámetro adicional llamado HttpOnly. Las cookies HttpOnly se envían con solicitudes AJAX, pero no se pueden obtener a través de JavaScript en la página del sitio web. Esto proporciona un nivel adicional de seguridad contra ataques XSS.

Envío al servidor

Actualizamos la página en el navegador. Después de eso, se envía el siguiente encabezado:

Cookie: GCLB=CLiC7uWajOOrzAE;_codica_session2=gu3n8MCidqZ28VfjpzJuF74d4ohla6uYq9Q%2B2XBcalsa3VUCz
URBWTXvscuzSI%2BF3lnHAN%2FUt6IJnXgkH%2B6jDKgyStVb8W%2BLHwIbypoxajN3fB5ksFT3Qu28RvDQpL6hBmqq7V2eFd
fLMGtkmtcpfAUYNGffwaBAlQyQKnvhkCpEf5IIWkwWfe9Nt8dG3lIueeir9fGxZP7Fpcw9IP9HfgSansgXugtFI1rw06Uhgrr
K%2BEnaf4EmIgVdH6KYpDBKXpUUXz8vFRvkOMX5j%2BZNMTu%2BKDBzmGlFjcm1mCZl4ozZWDCocFO4CTW7z9LmzKYbcEGkUE
hRbOu%2BTvLgVo80LilK--x3y6jxx%2FjYcLp5tr--9nrQ0XmAhtGAuIFvMYvWig%3D%3D

Todas las cookies se envían en un solo encabezado en el formato clave=valor; clave=valor sin parámetros adicionales.


Materiales adicionales

  1. HTTP Cookie / Mozilla
  2. HTTP Cookies / Wikipedia
  3. RFC 6265: estándar que describe las cookies

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY