Entrada
JavaScript

localStorage y sessionStorage

Web Storage API: Almacenamiento persistente en el navegador

JavaScript: localStorage y sessionStorage

Los navegadores modernos ofrecen mecanismos para almacenar datos del lado del cliente sin necesidad de bases de datos o cookies tradicionales.
Dentro de estas soluciones se encuentra la Web Storage API, que incluye dos interfaces principales:

  • localStorage
  • sessionStorage

Ambas permiten almacenar pares clave–valor de forma persistente o temporal, dependiendo del caso de uso.

¿Qué es Web Storage API?

La Web Storage API permite almacenar información en el navegador del usuario de forma simple y sincrónica.

Características principales:

  • Almacenamiento en pares clave–valor
  • Solo admite strings
  • Acceso mediante JavaScript
  • No se envía automáticamente al servidor
  • Capacidad aproximada de 5MB por dominio

Las dos implementaciones son:

  • localStorage: persistente
  • sessionStorage: dependiente de la sesión

¿Qué es localStorage?

localStorage almacena datos de forma persistente.
La información se mantiene incluso si el usuario:

  • Cierra el navegador
  • Reinicia el sistema
  • Vuelve días después

Los datos solo se eliminan si:

  • El usuario limpia el almacenamiento
  • Se elimina explícitamente con JavaScript

Uso básico

1
localStorage.setItem("theme", "dark");
1
const theme = localStorage.getItem("theme");
1
localStorage.removeItem("theme");
1
localStorage.clear();

Ejemplo práctico

Guardar preferencias del usuario:

1
2
3
4
5
6
7
function saveTheme(theme) {
  localStorage.setItem("theme", theme);
}

function loadTheme() {
  return localStorage.getItem("theme") || "light";
}

¿Qué es sessionStorage?

sessionStorage almacena datos solo durante la sesión actual del navegador.

La sesión termina cuando:

  • Se cierra la pestaña
  • Se cierra la ventana

Características clave:

  • Cada pestaña tiene su propio sessionStorage
  • No se comparte entre pestañas
  • Ideal para estados temporales

Uso básico

1
sessionStorage.setItem("step", "2");
1
const step = sessionStorage.getItem("step");
1
sessionStorage.removeItem("step");
1
sessionStorage.clear();

Ejemplo práctico

Guardar progreso temporal de un formulario:

1
2
3
4
5
6
7
function saveStep(step) {
  sessionStorage.setItem("formStep", step);
}

function loadStep() {
  return sessionStorage.getItem("formStep");
}

Diferencias entre localStorage y sessionStorage

CaracterísticalocalStoragesessionStorage
PersistenciaPermanenteSolo sesión
Cierre de pestañaNo borra datosBorra datos
Compartido entre pestañasNo
Capacidad~5MB~5MB
Uso típicoPreferencias, cachéEstados temporales

Almacenamiento de objetos

Web Storage solo admite strings. Para almacenar objetos es necesario usar JSON.

Guardar objeto

1
2
3
4
5
6
7
const user = {
  id: 1,
  name: "Marco",
  role: "admin"
};

localStorage.setItem("user", JSON.stringify(user));

Leer objeto

1
const user = JSON.parse(localStorage.getItem("user"));

Eventos de sincronización (storage)

Cuando localStorage cambia en una pestaña, otras pestañas del mismo dominio reciben el evento storage.

1
2
3
4
window.addEventListener("storage", (event) => {
  console.log(event.key);
  console.log(event.newValue);
});

Notas importantes:

  • No se dispara en la misma pestaña
  • Solo funciona con localStorage
  • Útil para sincronizar sesiones

Limitaciones importantes

1. Sincrónico

Todas las operaciones bloquean el hilo principal:

1
localStorage.setItem("bigData", hugeString); // puede causar jank

No es recomendable para grandes volúmenes de datos.

2. Seguridad

Nunca almacenar:

  • Tokens JWT
  • Contraseñas
  • Datos sensibles

localStorage es accesible por cualquier script que se ejecute en la página, lo que lo hace vulnerable a ataques XSS.

3. No reemplaza una base de datos

Web Storage es útil para:

  • Caché
  • Estado UI
  • Preferencias

No para:

  • Datos críticos
  • Información confidencial
  • Lógica de negocio

Buenas prácticas

  • Usar prefijos de clave:
1
2
app.theme
app.user.settings
  • Validar datos al leer
  • Manejar errores de JSON.parse
  • Limpiar datos obsoletos
  • No abusar del almacenamiento

Ejemplo seguro:

1
2
3
4
5
6
7
function getJSON(key) {
  try {
    return JSON.parse(localStorage.getItem(key));
  } catch {
    return null;
  }
}

¿Cuándo usar cada uno?

Usa localStorage cuando:

  • Necesitas persistencia
  • Guardas preferencias
  • Implementas caché simple

Usa sessionStorage cuando:

  • El estado es temporal
  • Depende de una pestaña
  • No debe persistir

Soporte y más recursos

Window.localStorage

NavegadorSoporteVersión
chrome Si4
firefox Si3.5
safari Si4
edge Si12
ie Si8

Window.sessionStorage

NavegadorSoporteVersión
chrome Si4
firefox Si2
safari Si4
edge Si12
Esta entrada está licenciada bajo CC BY 4.0 por el autor.