Cookies vs localStorage vs sessionStorage: Elige bien

Web2026-09-30TryQuickToolBox

Al crear una aplicación web, a menudo necesitas almacenar datos en el lado del cliente, ya sea la preferencia de tema de un usuario, un carrito de compras o un token de autenticación. Las tres opciones principales son cookies, localStorage y sessionStorage. Cada una tiene características distintas que la hacen adecuada para diferentes escenarios. Elegir la incorrecta puede provocar vulnerabilidades de seguridad, problemas de rendimiento o una mala experiencia de usuario.

Este artículo desglosa las diferencias, ofrece una guía práctica y te ayuda a decidir qué mecanismo de almacenamiento usar en tu próximo proyecto.

Comparación rápida

Antes de entrar en detalles, aquí tienes una visión general de alto nivel de los tres tipos de almacenamiento:

Característica Cookies localStorage sessionStorage
Capacidad ~4KB por dominio ~5-10MB por origen ~5-10MB por origen
Persistencia Caducidad configurable Hasta que se borre explícitamente Hasta que se cierre la pestaña/ventana
Enviado al servidor Automáticamente con cada solicitud HTTP No No
Accesible vía JavaScript Sí (a menos que sea HttpOnly) Sí Sí
Alcance Dominio y ruta Origen (protocolo + dominio + puerto) Origen + pestaña/ventana
Vulnerable a XSS Sí (si no es HttpOnly) Sí Sí
Vulnerable a CSRF Sí (si se usa para autenticación) No No

Cookies: el almacenamiento original del cliente

Las cookies existen desde los primeros días de la web. Son pequeñas piezas de datos (máx. ~4KB) que el navegador almacena y envía automáticamente al servidor con cada solicitud HTTP al mismo dominio.

Cuándo usar cookies

Consideraciones de seguridad

Las cookies se envían automáticamente, lo que las hace vulnerables a CSRF si se usan para autenticación sin protecciones adicionales. Configura siempre el atributo SameSite (Lax o Strict) y considera usar tokens CSRF. Para datos sensibles, usa HttpOnly para impedir el acceso desde JavaScript, reduciendo el impacto de XSS.

Ejemplo de cómo establecer una cookie segura en una respuesta HTTP:

Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600

localStorage: almacenamiento clave-valor persistente

localStorage proporciona un almacén clave-valor simple que persiste incluso después de cerrar el navegador. Los datos se almacenan por origen (protocolo + dominio + puerto) y no se envían al servidor automáticamente. Es ideal para almacenar datos no sensibles que deben sobrevivir a recargas de página y reinicios del navegador.

Cuándo usar localStorage

Consideraciones de seguridad

localStorage es accesible vía JavaScript, por lo que cualquier vulnerabilidad XSS puede exponer todos los datos almacenados. Nunca almacenes información sensible como contraseñas, números de identificación personal o tokens de autenticación a menos que tengas protecciones robustas contra XSS. Si debes almacenar tokens, considera usar el enfoque de cookies HttpOnly en su lugar.

Ejemplo de uso de localStorage:

// Guardar preferencia del usuario
localStorage.setItem('theme', 'dark');

// Recuperar preferencia
const theme = localStorage.getItem('theme');

// Eliminar elemento
localStorage.removeItem('theme');

sessionStorage: almacenamiento por pestaña

sessionStorage es similar a localStorage pero con una vida útil más corta: los datos se borran cuando se cierra la pestaña o ventana. Está limitado a una sola pestaña, por lo que los datos no se comparten entre pestañas o ventanas, incluso para el mismo origen.

Cuándo usar sessionStorage

Consideraciones de seguridad

Al igual que localStorage, sessionStorage es vulnerable a XSS. Sin embargo, su vida útil limitada y su alcance por pestaña reducen la ventana de oportunidad para los atacantes. Aun así, evita almacenar datos altamente sensibles.

Ejemplo de uso de sessionStorage:

// Guardar datos del formulario
sessionStorage.setItem('formStep1', JSON.stringify({name: 'John'}));

// Recuperar datos del formulario
const step1 = JSON.parse(sessionStorage.getItem('formStep1'));

Cómo elegir: guía de decisión

Usa la siguiente lista ordenada para guiar tu decisión:

  1. ¿El servidor necesita leer los datos en cada solicitud? Si es así, usa cookies. Ejemplo: IDs de sesión.
  2. ¿Los datos deben persistir entre sesiones del navegador? Si es así, usa localStorage. Ejemplo: preferencias del usuario.
  3. ¿Los datos deben limitarse a una sola pestaña? Si es así, usa sessionStorage. Ejemplo: datos de formularios de varios pasos.
  4. ¿Los datos son sensibles? Evita almacenarlos en localStorage o sessionStorage. Usa cookies HttpOnly para tokens y nunca almacenes contraseñas.
  5. ¿Los datos son grandes? Las cookies están limitadas a ~4KB; localStorage y sessionStorage ofrecen mucha más capacidad.

Mejores prácticas de seguridad

Preguntas frecuentes

¿Puedo usar localStorage para tokens de autenticación?

No es recomendable porque localStorage es accesible vía JavaScript, lo que hace que los tokens sean vulnerables a XSS. Prefiere cookies HttpOnly con las flags Secure y SameSite.

¿Qué pasa con sessionStorage cuando duplico una pestaña?

Cuando duplicas una pestaña, la nueva pestaña obtiene una copia del sessionStorage de la pestaña original en el momento de la duplicación. Después de eso, son independientes.

¿Se envían las cookies al servidor en cada solicitud?

Sí, las cookies del dominio actual se incluyen automáticamente en cada solicitud HTTP, lo que puede afectar el rendimiento si almacenas demasiados datos. Úsalas con moderación.

¿Necesitas formatear o validar rápidamente los datos JSON que estás almacenando? Prueba nuestro Formateador JSON para embellecer y depurar tus payloads JSON antes de guardarlos en el almacenamiento del cliente.