Persistencia en navegador: localStorage y sessionStorage

Guarda estado útil en cliente con criterio: qué persistir, cómo serializar y cómo evitar inconsistencias.

Storage permite mantener preferencias y estado entre recargas sin backend.

localStorage persiste entre sesiones; sessionStorage vive solo en pestaña actual.

Solo guarda datos no sensibles y con tamaño razonable.

Serializa con JSON de forma explícita para evitar errores de tipo.

  • Persistencia útil, no cajón de sastre.
  • Sí: tema visual, filtros, borradores, último tab activo.
  • No: tokens sensibles, datos críticos de negocio.
  • Sí: valores pequeños y simples.
  • No: blobs grandes o estructuras gigantes.

Cuándo sí y cuándo no usar storage

Persistencia útil, no cajón de sastre.

  • Sí: tema visual, filtros, borradores, último tab activo.
  • No: tokens sensibles, datos críticos de negocio.
  • Sí: valores pequeños y simples.
  • No: blobs grandes o estructuras gigantes.

Guardar y leer objetos correctamente

Storage guarda strings: tú controlas serialización.

  • Siempre maneja `null` cuando no existe clave.
  • Usa `try/catch` si la fuente puede estar corrupta.
  • Define valores por defecto claros.

Sincronizar storage con UI

Carga al iniciar y guarda tras cada cambio relevante.

El patrón típico es `hydrate` al cargar página y `persist` al cambiar estado.

Si cambias estado pero no guardas, tendrás inconsistencias al recargar.

JavaScript
32

Persistencia en navegador: localStorage y sessionStorage

Guarda estado útil en cliente con criterio: qué persistir, cómo serializar y cómo evitar inconsistencias.

Código del tema: localStorage.setItem/getItem | JSON.stringify/parse

📘 Teoría

Cuándo sí y cuándo no usar storage

Persistencia útil, no cajón de sastre.

  • Sí: tema visual, filtros, borradores, último tab activo.
  • No: tokens sensibles, datos críticos de negocio.
  • Sí: valores pequeños y simples.
  • No: blobs grandes o estructuras gigantes.

Guardar y leer objetos correctamente

Storage guarda strings: tú controlas serialización.

  • Siempre maneja `null` cuando no existe clave.
  • Usa `try/catch` si la fuente puede estar corrupta.
  • Define valores por defecto claros.
Patrón seguro de persistencia
const estadoUI = { tema: 'oscuro', sidebar: true };

localStorage.setItem('ui', JSON.stringify(estadoUI));

const raw = localStorage.getItem('ui');
const ui = raw ? JSON.parse(raw) : { tema: 'claro', sidebar: false };

console.log(ui);

Sincronizar storage con UI

Carga al iniciar y guarda tras cada cambio relevante.

1

El patrón típico es `hydrate` al cargar página y `persist` al cambiar estado.

2

Si cambias estado pero no guardas, tendrás inconsistencias al recargar.

Persistencia de tema
const btn = document.querySelector('#toggle-theme');
const saved = localStorage.getItem('theme') || 'light';
document.body.dataset.theme = saved;

btn.addEventListener('click', () => {
  const next = document.body.dataset.theme === 'light' ? 'dark' : 'light';
  document.body.dataset.theme = next;
  localStorage.setItem('theme', next);
});

🧪 Aprende probando

Ejemplo Ejemplo guiado: guardar preferencias Persistir objeto de configuración con JSON.

🏁 Retos

Reto Reto: sesión temporal con sessionStorage Guarda un valor que se mantenga mientras la pestaña siga abierta.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre JavaScript.

Test de JavaScript

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .