Command Palette

Search for a command to run...

Cookies: Lectura y Escritura en JavaScript

Aprende a leer, escribir y eliminar cookies en JavaScript usando document.cookie, incluyendo seguridad, HttpOnly, Secure y SameSite.

Lectura: 15 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • Las cookies son pequeños archivos de texto almacenados en el navegador del usuario
  • document.cookie permite leer, escribir y eliminar cookies en JavaScript
  • Las cookies tienen atributos como Expires, Max-Age, Domain, Path, Secure y HttpOnly
  • Cookie Store API es una alternativa moderna más segura para gestionar cookies
  • Las cookies pueden ser vulnerables a ataques XSS y CSRF si no se configuran correctamente

Introducción a las Cookies

Las cookies son pequeños archivos de texto que los sitios web almacenan en el navegador del usuario. Se usan para recordar información sobre el usuario, como preferencias, estado de sesión, y datos de autenticación. Cada cookie tiene un nombre, un valor, y varios atributos opcionales que controlan su comportamiento.

En JavaScript, puedes acceder a las cookies usando la propiedad document.cookie. Esta propiedad devuelve una cadena con todas las cookies del dominio actual en formato nombre=valor; nombre2=valor2. Para escribir una cookie, simplemente asignas una cadena a document.cookie en el formato correcto.

  • <strong>Persistencia:</strong> Las cookies persisten entre sesiones del navegador
  • <strong>Limitaciones:</strong> Máximo 4KB por cookie y 20 cookies por dominio
  • <strong>Envío automático:</strong> Las cookies se envían automáticamente con cada solicitud HTTP
  • <strong>Seguridad:</strong> Pueden ser vulnerables a ataques si no se configuran correctamente
  • <strong>Alternativas:</strong> localStorage y sessionStorage para datos del lado del cliente

Privacidad y las Cookies

Debido a regulaciones como GDPR y CCPA, los sitios web deben obtener el consentimiento del usuario antes de almacenar cookies. Asegúrate de cumplir con las leyes de privacidad aplicables en tu región.

¿Qué son las Cookies?

Las cookies son fragmentos de datos que un servidor web envía al navegador del usuario. El navegador almacena estos datos y los envía de vuelta al servidor con cada solicitud subsiguiente. Esto permite que el servidor identifique al usuario y mantenga el estado entre solicitudes.

Tipos de Cookies

Hay diferentes tipos de cookies según su propósito y atributos. Las cookies de sesión expiran cuando se cierra el navegador, mientras que las cookies persistentes tienen una fecha de expiración específica. Las cookies de terceros son creadas por dominios diferentes al que visita el usuario.

tipos-cookies.js
Loading code...

Las cookies de sesión son útiles para datos temporales como el carrito de compras, mientras que las cookies persistentes son ideales para recordar preferencias del usuario a largo plazo. Las cookies de terceros se usan comúnmente para rastreo y publicidad. Nota importante: las cookies se envían automáticamente con cada solicitud HTTP, lo que puede afectar el rendimiento. localStorage es una alternativa más eficiente para datos que no necesitan ser enviados al servidor.

Leer Cookies

Para leer cookies en JavaScript, accedes a la propiedad document.cookie. Esta propiedad devuelve una cadena con todas las cookies del dominio actual en formato nombre=valor; nombre2=valor2. Debes parsear esta cadena para acceder a cookies individuales.

Leer Todas las Cookies

La forma más simple de leer cookies es acceder directamente a document.cookie. Esto devuelve todas las cookies como una cadena que puedes mostrar al usuario o procesar de alguna forma.

leer-todas-cookies.js
Loading code...

Este método devuelve todas las cookies como una cadena. Para acceder a cookies individuales, necesitas parsear esta cadena y extraer el valor de la cookie específica que buscas.

Escribir Cookies

Para escribir una cookie en JavaScript, simplemente asignas una cadena a document.cookie en el formato nombre=valor; atributos. La cookie se creará inmediatamente y estará disponible para leer en la próxima solicitud.

Eliminar Cookies

Para eliminar una cookie, debes asignar una cookie con el mismo nombre y dominio, pero con una fecha de expiración en el pasado. Esto le indica al navegador que la cookie ha expirado y debe ser eliminada.

Eliminar Todas las Cookies

Para eliminar todas las cookies del dominio actual, puedes iterar sobre todas las cookies y eliminarlas una por una. Esto es útil cuando quieres limpiar todas las cookies del usuario, por ejemplo, al cerrar sesión.

eliminar-todas-cookies.js
Loading code...

Este método obtiene todas las cookies, las divide en pares nombre=valor, y elimina cada cookie asignando una fecha de expiración en el pasado. Es una forma efectiva de limpiar todas las cookies del dominio actual. Como buena práctica, siempre elimina las cookies cuando el usuario cierre sesión o cuando ya no sean necesarias: las cookies antiguas pueden ser vulnerables a ataques y ocupan espacio innecesario.

Seguridad en Cookies

Las cookies pueden ser vulnerables a varios ataques si no se configuran correctamente. Los atributos de seguridad como Secure, HttpOnly y SameSite son fundamentales para proteger las cookies contra ataques como XSS y CSRF.

Protección contra XSS

El atributo HttpOnly previene que las cookies sean accesibles desde JavaScript en el lado del cliente. Esto protege contra ataques XSS donde un atacante intenta leer las cookies del usuario usando JavaScript malicioso.

proteccion-xss.js
Loading code...

Las cookies con HttpOnly no pueden ser leídas desde document.cookie, lo que significa que no puedes acceder a ellas desde JavaScript en el lado del cliente. Sin embargo, el servidor aún puede leerlas y usarlas para autenticación.

Protección contra CSRF

El atributo SameSite controla si las cookies se envían con solicitudes de sitios de terceros. Esto protege contra ataques CSRF donde un atacante engaña al usuario para hacer solicitudes maliciosas a tu sitio.

proteccion-csrf.js
Loading code...

SameSite=Strict es el valor más seguro y solo envía la cookie con solicitudes del mismo sitio. SameSite=Lax es más permisivo y permite la cookie con navegaciones de nivel superior. SameSite=None permite la cookie con solicitudes de cualquier sitio, pero requiere Secure.

Mejor Práctica de Seguridad

Siempre usa los atributos Secure, HttpOnly y SameSite en las cookies que contienen información sensible como tokens de sesión. Estos atributos proporcionan protección contra ataques comunes como XSS y CSRF.

Errores Comunes

Al trabajar con cookies, hay varios errores comunes que puedes encontrar. Conocer estos errores te ayudará a escribir código más robusto y evitar bugs difíciles de depurar.

Problemas de Encoding

Los valores de las cookies deben estar correctamente codificados para evitar errores. Los caracteres especiales como espacios, punto y coma pueden causar problemas si no se codifican correctamente.

error-encoding.js
Loading code...

La función encodeURIComponent() codifica caracteres especiales en formato URL, lo que es necesario para los valores de las cookies. Al leer las cookies, debes decodificar los valores usando decodeURIComponent().

Advertencia sobre Tamaño de Cookies

Las cookies tienen un límite de tamaño de 4KB por cookie. Si intentas almacenar más datos que esto, la cookie será truncada o no se creará. Usa localStorage o sessionStorage para datos más grandes.

Resumen: Cookies

Conceptos principales:

  • Las cookies son pequeños archivos de texto almacenados en el navegador del usuario
  • document.cookie permite leer, escribir y eliminar cookies en JavaScript
  • Las cookies tienen atributos como Expires, Max-Age, Domain, Path, Secure y HttpOnly
  • Cookie Store API es una alternativa moderna más segura para gestionar cookies
  • Los atributos de seguridad como Secure, HttpOnly y SameSite protegen contra ataques

Mejores prácticas:

  • Usa los atributos Secure, HttpOnly y SameSite en cookies con información sensible
  • Siempre verifica si la cookie existe antes de usar su valor
  • Usa encodeURIComponent() para codificar los valores de las cookies
  • Elimina las cookies cuando el usuario cierre sesión o cuando ya no sean necesarias
  • Considera usar localStorage o sessionStorage para datos que no necesitan ser enviados al servidor