¿Qué es el almacenamiento local en HTML?

Web Storage: Almacenamiento Local en HTML

Valoración: 3.94 (6952 votos)

En el mundo del desarrollo web moderno, la capacidad de almacenar información directamente en el navegador del usuario es fundamental para crear experiencias ricas y eficientes. Históricamente, las aplicaciones web dependían en gran medida de las cookies para persistir pequeños fragmentos de datos en el lado del cliente. Sin embargo, las cookies tienen limitaciones significativas en cuanto a tamaño, seguridad y rendimiento, ya que se envían al servidor con cada solicitud HTTP.

La llegada de HTML5 trajo consigo una solución mucho más robusta y flexible para este desafío: la API Web Storage. Esta tecnología permite a las aplicaciones web almacenar cantidades considerables de datos localmente dentro del navegador del usuario de una manera más segura y eficiente, sin la necesidad de transmitirlos constantemente al servidor.

¿Cómo hacer una base de datos en HTML?
Para crear una base de datos en HTML, es necesario utilizar un lenguaje de programación como PHP, que permite la conexión a la base de datos y la ejecución de comandos SQL. SQL es un lenguaje de consulta estructurado que le permite crear, leer, actualizar y eliminar registros en una base de datos.
Índice de Contenido

¿Qué es la API Web Storage de HTML?

La API Web Storage es una especificación que proporciona mecanismos para almacenar pares clave-valor en el navegador web del usuario. A diferencia de las cookies, los datos almacenados a través de Web Storage no se envían automáticamente al servidor con cada solicitud. Esto tiene un impacto directo y positivo en el rendimiento de las aplicaciones web, especialmente aquellas que manejan una cantidad considerable de datos del lado del cliente.

Las principales ventajas de utilizar Web Storage en comparación con las cookies incluyen:

  • Mayor Capacidad de Almacenamiento: Mientras que las cookies suelen estar limitadas a unos pocos kilobytes (generalmente 4KB), Web Storage ofrece una capacidad mucho mayor, típicamente de al menos 5 MB por origen.
  • Mejor Rendimiento: Al no enviar los datos al servidor con cada solicitud, se reduce la sobrecarga de red y se acelera la comunicación entre el cliente y el servidor.
  • Mayor Seguridad (en ciertos aspectos): Los datos almacenados con Web Storage están ligados al origen (dominio y protocolo) que los creó. Solo las páginas del mismo origen pueden acceder a esos datos. Esto implementa una política de mismo origen más estricta que la de las cookies, aunque los datos siguen siendo accesibles vía JavaScript en el cliente y no deben usarse para información sensible sin cifrado adicional.
  • API Sencilla: Proporciona un conjunto de métodos fáciles de usar para almacenar, recuperar y eliminar datos.

La información almacenada mediante Web Storage está organizada por origen. Esto significa que todas las páginas que comparten el mismo dominio y protocolo (por ejemplo, https://www.ejemplo.com) pueden acceder y compartir los mismos datos almacenados. Una página en https://www.ejemplo.com no podrá acceder a los datos almacenados por una página en https://sub.ejemplo.com o http://www.ejemplo.com (si el protocolo es diferente).

Los Objetos de la API Web Storage: localStorage y sessionStorage

La API Web Storage proporciona dos objetos principales para gestionar el almacenamiento de datos en el navegador, cada uno con un comportamiento de persistencia distinto:

window.localStorage

El objeto localStorage almacena datos sin fecha de expiración. Esto significa que los datos persisten incluso después de que el usuario cierra la ventana o pestaña del navegador, e incluso después de reiniciar el ordenador. Los datos almacenados en localStorage solo se eliminarán si el usuario los borra explícitamente a través de la configuración del navegador (por ejemplo, borrando el historial de navegación, las cookies y los datos de sitios) o si la aplicación web los elimina mediante código.

Es ideal para almacenar información que necesita estar disponible a largo plazo, como preferencias de usuario (modo oscuro, idioma), tokens de sesión persistentes (con precauciones de seguridad), o partes de datos que permiten una experiencia offline básica o una carga más rápida.

window.sessionStorage

El objeto sessionStorage almacena datos solo para una sesión. Una sesión se considera activa mientras la pestaña o ventana del navegador esté abierta. Los datos almacenados en sessionStorage se pierden automáticamente cuando el usuario cierra la pestaña o ventana específica donde se originó la sesión. Si el usuario abre la misma página en una nueva pestaña o ventana, se inicia una nueva sesión de sessionStorage, sin acceso a los datos de la sesión anterior.

Este objeto es útil para almacenar información temporal que es relevante solo durante la interacción actual del usuario con el sitio web, como el contenido de un carrito de compras antes de finalizar la compra, datos de formularios que se están llenando, o el estado de una aplicación de una sola página (SPA) durante la sesión activa.

Manejo Básico de Datos con Web Storage

Tanto localStorage como sessionStorage exponen la misma API para interactuar con los datos. Los métodos más comunes son:

  • setItem(key, value): Almacena un par clave-valor. Tanto la clave como el valor se almacenan como cadenas de texto.
  • getItem(key): Recupera el valor asociado a una clave especificada. Devuelve null si la clave no existe. El valor se devuelve como una cadena de texto.
  • removeItem(key): Elimina el par clave-valor asociado a una clave especificada.
  • clear(): Elimina todos los pares clave-valor almacenados para el origen actual.
  • key(index): Devuelve la clave en el índice especificado.
  • length: Devuelve el número de pares clave-valor almacenados.

Es crucial recordar que Web Storage almacena todo como cadenas de texto. Si necesitas almacenar números, booleanos, arrays u objetos, deberás convertirlos a cadena antes de almacenarlos (serialización) y convertirlos de vuelta a su tipo original al recuperarlos (deserialización). El formato más común y recomendado para esto es JSON (JavaScript Object Notation), utilizando JSON.stringify() para serializar y JSON.parse() para deserializar.

Ejemplo de Uso con localStorage

Supongamos que queremos guardar el nombre del usuario y un color de fondo preferido:

// Verificar si el navegador soporta Web Storage if (typeof(Storage) !== "undefined") { // Almacenar datos localStorage.setItem("nombreUsuario", "Juan Pérez"); localStorage.setItem("colorFondo", "#f0f0f0"); // Recuperar datos const nombre = localStorage.getItem("nombreUsuario"); const color = localStorage.getItem("colorFondo"); console.log("Nombre recuperado: " + nombre); // Salida: Nombre recuperado: Juan Pérez console.log("Color recuperado: " + color); // Salida: Color recuperado: #f0f0f0 // Eliminar un dato // localStorage.removeItem("colorFondo"); // Eliminar todos los datos del origen // localStorage.clear(); } else { console.log("Lo siento, tu navegador no soporta Web Storage."); }

Este ejemplo muestra cómo usar setItem para guardar información y getItem para recuperarla. La verificación inicial typeof(Storage) !== "undefined" es una buena práctica para asegurar que la API está disponible en el navegador del usuario antes de intentar usarla.

Ejemplo: Contador de Clics con localStorage

Un ejemplo práctico mencionado en la información inicial es un contador de clics que persiste entre sesiones:

function clickCounter() { if (typeof(Storage) !== "undefined") { // Recuperar el valor actual, si existe let clickcount = localStorage.getItem("clickcount"); // Verificar si ya existe y es un número válido if (clickcount) { // Convertir a número, incrementar y volver a almacenar como cadena clickcount = Number(clickcount) + 1; localStorage.setItem("clickcount", clickcount); } else { // Si no existe, inicializar a 1 localStorage.setItem("clickcount", 1); } // Mostrar el resultado (esto iría en un elemento HTML) console.log("Has hecho clic " + localStorage.getItem("clickcount") + " vez(ces)!"); } else { console.log("Lo siento, tu navegador no soporta Web Storage."); } }

Este código ilustra la necesidad de convertir el valor recuperado (que es una cadena) a un número (Number(clickcount)) antes de realizar la operación aritmética, y luego volver a almacenarlo como cadena. Es un error común olvidar esta conversión.

Ejemplo de Uso con sessionStorage

El uso de sessionStorage es idéntico en cuanto a los métodos, solo difiere en la persistencia:

// Verificar si el navegador soporta Web Storage if (typeof(Storage) !== "undefined") { // Almacenar datos para la sesión actual sessionStorage.setItem("estadoLogin", "autenticado"); // Recuperar datos const estado = sessionStorage.getItem("estadoLogin"); console.log("Estado de sesión: " + estado); // Salida: Estado de sesión: autenticado // Este dato se perderá al cerrar la pestaña/ventana } else { console.log("Lo siento, tu navegador no soporta Web Storage."); }

Este ejemplo guardaría un indicador de estado de login que solo dura mientras el usuario tiene abierta la pestaña actual.

Compatibilidad de Navegadores

La API Web Storage (tanto localStorage como sessionStorage) goza de una excelente compatibilidad en los navegadores modernos. Fue introducida en HTML5 y es soportada por las versiones recientes de Chrome, Firefox, Safari, Edge y Opera. Sin embargo, como buena práctica de desarrollo web, siempre es recomendable verificar la disponibilidad de la API antes de intentar utilizarla, como se mostró en los ejemplos anteriores, utilizando la condición typeof(Storage) !== "undefined".

Web Storage vs. Cookies: Una Comparativa

Para entender mejor por qué Web Storage es a menudo preferible a las cookies para el almacenamiento del lado del cliente, consideremos sus diferencias clave:

CaracterísticaWeb Storage (localStorage/sessionStorage)Cookies
Capacidad MáximaAl menos 5 MB por origenGeneralmente 4 KB por origen
Envío al ServidorNo se envía automáticamenteSe envía con cada solicitud HTTP al dominio asociado
APIMétodos simples (setItem, getItem, removeItem, clear)Acceso a través de document.cookie (manipulación de cadenas)
PersistencialocalStorage: Sin expiración (hasta que se borre) sessionStorage: Dura lo que dure la sesión (pestaña/ventana)Establecida por una fecha de expiración o al cerrar el navegador (sesión)
AccesibilidadSolo accesible por scripts del mismo origenAccesible por scripts del mismo origen y por el servidor (vía encabezados HTTP)
RendimientoMejora el rendimiento al reducir el tráfico de redPuede impactar el rendimiento al aumentar el tamaño de los encabezados HTTP

Como se puede observar, Web Storage es superior para la mayoría de los casos de almacenamiento de datos del lado del cliente que no necesitan ser accesibles directamente por el servidor en cada solicitud.

Casos de Uso Comunes para Web Storage

Dado su funcionamiento y capacidades, Web Storage es ideal para una variedad de aplicaciones:

  • Preferencias de Usuario: Almacenar configuraciones como el tema (claro/oscuro), tamaño de fuente, idioma, o la disposición de elementos en la interfaz.
  • Contenido del Carrito de Compras: Usar sessionStorage para guardar los ítems que un usuario añade a su carrito antes de proceder al pago, perdiendo esta información si el usuario cierra la sesión de navegación (aunque para carritos persistentes entre visitas se podría usar localStorage o una base de datos en el servidor).
  • Datos de Formularios: Guardar el estado parcial de formularios largos para que el usuario no pierda su progreso si accidentalmente cierra la página o el navegador (usando sessionStorage).
  • Aplicaciones Offline Sencillas: Almacenar datos necesarios para que una aplicación web funcione parcialmente sin conexión a internet, aunque para aplicaciones offline más complejas se suelen usar Service Workers e IndexedDB.
  • Cache de Recursos Pequeños: Guardar fragmentos de datos JSON obtenidos del servidor para evitar peticiones repetidas si los datos no cambian con frecuencia.
  • Seguimiento Básico de Interacciones: Contadores de clics o visitas por sesión/usuario (como en el ejemplo), aunque para analíticas robustas se usan otras herramientas.

Consideraciones de Seguridad y Limitaciones

Aunque Web Storage es más seguro que las cookies en el sentido de que los datos no se envían automáticamente al servidor y están ligados estrictamente al origen, es importante entender sus limitaciones de seguridad:

  • Datos del Lado del Cliente: La información se almacena en el navegador del usuario. No es un lugar seguro para guardar datos altamente sensibles o secretos.
  • Riesgo de XSS: Si tu sitio web es vulnerable a ataques de Cross-Site Scripting (XSS), un atacante podría ejecutar código malicioso en el navegador del usuario y acceder a los datos almacenados en localStorage o sessionStorage.
  • No Cifrado por Defecto: Los datos se almacenan en texto plano. Si necesitas cifrar información antes de almacenarla, debes hacerlo tú mismo en el código JavaScript.
  • Capacidad Limitada: Aunque es mayor que la de las cookies, 5MB (o más, dependiendo del navegador) no es suficiente para almacenar grandes bases de datos o archivos multimedia. Para eso, existen otras APIs como IndexedDB.
  • Bloqueo por el Usuario: El usuario puede desactivar o borrar los datos de Web Storage a través de la configuración de su navegador. No se debe depender de Web Storage para almacenar información crítica que la aplicación necesite obligatoriamente para funcionar.

Preguntas Frecuentes sobre Web Storage

Aquí respondemos algunas preguntas comunes sobre esta API:

¿Cuál es la diferencia clave entre localStorage y sessionStorage?

La diferencia fundamental radica en la persistencia. localStorage mantiene los datos almacenados indefinidamente hasta que son explícitamente borrados por el usuario o el código. sessionStorage, por otro lado, solo conserva los datos durante la vida útil de la pestaña o ventana específica donde se crearon; los datos se pierden al cerrar esa pestaña o ventana.

¿Cuánta información puedo almacenar con Web Storage?

La especificación no define un límite exacto, pero la mayoría de los navegadores modernos implementan un límite de al menos 5 MB por origen. Algunos navegadores pueden permitir más, pero 5 MB es una cifra segura sobre la que basarse.

¿Es seguro almacenar datos sensibles en localStorage o sessionStorage?

Generalmente, no. Aunque los datos están ligados al origen, no están cifrados por defecto y son accesibles a través de JavaScript en el lado del cliente. Si tu sitio tiene vulnerabilidades XSS, los datos podrían ser comprometidos. Web Storage no es un sustituto para almacenar información confidencial que debería residir en un servidor seguro y ser gestionada a través de un backend robusto.

¿Cómo puedo almacenar objetos o arrays en Web Storage?

Web Storage solo almacena cadenas de texto. Para guardar objetos o arrays, primero debes convertirlos a una cadena JSON usando JSON.stringify(tuObjetoOArray). Para recuperarlos, lees la cadena con getItem() y la conviertes de nuevo a objeto/array usando JSON.parse(laCadenaJSON).

¿Puedo acceder a los datos de Web Storage de un dominio diferente?

No. Web Storage sigue la política de mismo origen. Solo las páginas que comparten el mismo protocolo, dominio y puerto pueden acceder a los datos almacenados por ese origen específico. Esto es una característica de seguridad importante.

Conclusión

La API Web Storage de HTML5, con sus objetos localStorage y sessionStorage, representa un avance significativo en la capacidad de las aplicaciones web para gestionar datos en el lado del cliente. Ofrece una alternativa mucho más potente y eficiente a las cookies para numerosos casos de uso, gracias a su mayor capacidad, mejor rendimiento y una API más limpia. Si bien no es adecuada para almacenar información altamente sensible o grandes volúmenes de datos estructurados (para lo cual IndexedDB es más apropiado), es una herramienta indispensable en el arsenal de cualquier desarrollador web para mejorar la experiencia del usuario y optimizar el rendimiento de sus aplicaciones.

Si quieres conocer otros artículos parecidos a Web Storage: Almacenamiento Local en HTML puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir