La API de almacenamiento web proporciona una forma de almacenar datos en el navegador. Define dos mecanismos de almacenamiento que son muy importantes: Session Storage y Local Storage, parte del conjunto de opciones de almacenamiento disponibles en la Plataforma Web.
- Introducción
- Cómo acceder al almacenamiento
- Métodos
- Límites de tamaño de almacenamiento
- Herramientas de desarrollo
Introducción
La API de almacenamiento web define dos mecanismos de almacenamiento que son muy importantes:Almacenamiento de sesionesyAlmacenamiento local.
Forman parte del conjunto de opciones de almacenamiento disponibles en la Plataforma Web, que incluye:
Application Cache está en desuso y Web SQL no está implementado en Firefox, Edge e IE.
Tanto el almacenamiento de sesiones como el almacenamiento local proporcionan un área privada para sus datos. Otros sitios web no pueden acceder a los datos que almacena.
El almacenamiento de sesión mantiene los datos almacenados en él durante la duración de la sesión de la página. Si varias ventanas o pestañas visitan el mismo sitio, tendrán dos instancias de almacenamiento de sesión diferentes.
Cuando se cierra una pestaña / ventana, se borra el Almacenamiento de sesión para esa pestaña / ventana en particular.
El almacenamiento de sesiones está destinado a permitir el escenario de manejo de diferentes procesos que ocurren en el mismo sitio de forma independiente, algo que no es posible con las cookies, por ejemplo, que se comparten en todas las sesiones.
En cambio, Local Storage conserva los datos hasta que se eliminan explícitamente, ya sea por usted o por el usuario. Nunca se limpia automáticamente y se comparte en todas las sesiones que acceden a un sitio.
Tanto el almacenamiento local como el almacenamiento de sesiones sonprotocolo específico: datos almacenados cuando se accede a la página utilizandohttp
no está disponible cuando la página se publica conhttps
, y viceversa.
El almacenamiento web solo es accesible en el navegador. No se envía al servidor como lo hacen las cookies.
Cómo acceder al almacenamiento
Tanto el almacenamiento local como el de sesión están disponibles en elwindow
objeto, para que pueda acceder a ellos usandosessionStorage
ylocalStorage
.
Su conjunto de propiedades y métodos es exactamente el mismo, porque devuelven el mismo objeto, unAlmacenamientoobjeto.
El objeto de almacenamiento tiene una propiedad única,length
, que es el número de elementos de datos almacenados en él.
Métodos
setItem(key, value)
setItem()
agrega un artículo al almacenamiento. Acepta una cadena como clave y una cadena como valor:
localStorage.setItem('username', 'flaviocopes')
localStorage.setItem('id', '123')
Si pasa cualquier valor que no sea una cadena, se convertirá en una cadena:
localStorage.setItem('test', 123) //stored as the '123' string
localStorage.setItem('test', { test: 1 }) //stored as "[object Object]"
getItem(key)
getItem()
es la forma de recuperar un valor de cadena del almacenamiento, utilizando la cadena de clave que se usó para almacenarlo:
localStorage.getItem('username') // 'flaviocopes'
localStorage.getItem('id') // '123'
removeItem(key)
removeItem()
elimina el elemento identificado porkey
del almacenamiento, sin devolver nada (unundefined
valor):
localStorage.removeItem('id')
key(n)
Cada artículo que almacena tiene un número de índice.
Puede parecer que el número es consecutivo, por lo que la primera vez que utilice
setItem()
, ese elemento puede ser referenciado usandokey(0)
, el siguiente conkey(1)
y así sucesivamente, pero no lo es. MDN dice "El orden de las claves está definido por el usuario-agente, por lo que no debe confiar en él".
Si hace referencia a un número que no apunta a un elemento de almacenamiento, devuelvenull
.
clear()
clear()
elimina todo del objeto de almacenamiento que está manipulando:
localStorage.setItem('a', 'a')
localStorage.setItem('b', 'b')
localStorage.length //2
localStorage.clear()
localStorage.length //0
Límites de tamaño de almacenamiento
A través de la API de almacenamiento, puede almacenar muchos más datos de los que podría almacenar con las cookies.
La cantidad de almacenamiento disponible en la Web puede variar según el tipo de almacenamiento (local o de sesión), el navegador y el tipo de dispositivo. Ainvestigaciónby html5rocks.com señala esos límites:
Escritorio
- Chrome, IE, Firefox: 10 MB
- Safari: 5 MB para almacenamiento local, almacenamiento de sesiones ilimitado
Móvil
- Chrome, Firefox: 10 MB
- iOS Safari y WebView: 5 MB para almacenamiento local, almacenamiento de sesiones ilimitado a menos que en iOS6 y iOS7 sea de 5 MB
- Navegador Android: 2 MB de almacenamiento local, almacenamiento de sesiones ilimitado
Superando la cuota
Debe manejar los errores de cuota, especialmente si almacena muchos datos. Puedes hacerlo con un try / catch:
try {
localStorage.setItem('key', 'value')
} catch (domException) {
if (
['QuotaExceededError', 'NS_ERROR_DOM_QUOTA_REACHED'].includes(
domException.name
)
) {
// handle quota limit exceeded error
}
}
Herramientas de desarrollo
Las DevTools de los principales navegadores ofrecen una interfaz agradable para inspeccionar y manipular los datos almacenados en el almacenamiento local y de sesión.
Cromo
Firefox
Safari
Descarga mi gratisManual para principiantes de JavaScript
Más tutoriales de navegador:
- Algunos trucos útiles disponibles en HTML5
- Cómo hice que un sitio web basado en CMS funcionara sin conexión
- La guía completa de aplicaciones web progresivas
- La API de Fetch
- La guía Push API
- La API de mensajería de canal
- Tutorial para trabajadores de servicios
- La guía de la API de caché
- La guía de la API de notificaciones
- Sumérjase en IndexedDB
- La API de selectores: querySelector y querySelectorAll
- Cargue JavaScript de forma eficiente con diferir y asincrónico
- El modelo de objetos de documento (DOM)
- La API de almacenamiento web: almacenamiento local y almacenamiento de sesiones
- Descubra cómo funcionan las cookies HTTP
- La API de historia
- El formato de imagen WebP
- XMLHttpRequest (XHR)
- Un tutorial detallado de SVG
- ¿Qué son las URL de datos?
- Hoja de ruta para aprender la plataforma web
- CORS, intercambio de recursos de origen cruzado
- Trabajadores web
- La guía requestAnimationFrame ()
- Que es el Doctype
- Trabajar con la consola de DevTools y la API de la consola
- La API de síntesis de voz
- Cómo esperar el evento DOM Ready en JavaScript simple
- Cómo agregar una clase a un elemento DOM
- Cómo recorrer los elementos DOM de querySelectorAll
- Cómo eliminar una clase de un elemento DOM
- Cómo comprobar si un elemento DOM tiene una clase
- Cómo cambiar un valor de nodo DOM
- Cómo agregar un evento de clic a una lista de elementos DOM devueltos por querySelectorAll
- WebRTC, la API web en tiempo real
- Cómo obtener la posición de desplazamiento de un elemento en JavaScript
- Cómo reemplazar un elemento DOM
- Cómo aceptar solo imágenes en un campo de archivo de entrada
- ¿Por qué utilizar una versión de vista previa de un navegador?
- El objeto Blob
- El objeto de archivo
- El objeto FileReader
- El objeto FileList
- ArrayBuffer
- ArrayBufferView
- El objeto URL
- Matrices escritas
- El objeto DataView
- La API BroadcastChannel
- La API de Streams
- El objeto FormData
- El objeto del navegador
- Cómo utilizar la API de geolocalización
- Cómo utilizar getUserMedia ()
- Cómo utilizar la API de arrastrar y soltar
- Cómo trabajar con el desplazamiento en páginas web
- Manejo de formularios en JavaScript
- Eventos de teclado
- Eventos del mouse
- Toque eventos
- Cómo eliminar a todos los hijos de un elemento DOM
- Cómo crear un atributo HTML usando Vanilla Javascript
- ¿Cómo verificar si una casilla de verificación está marcada usando JavaScript?
- Cómo copiar al portapapeles usando JavaScript
- Cómo deshabilitar un botón usando JavaScript
- Cómo hacer que una página sea editable en el navegador
- Cómo obtener valores de cadena de consulta en JavaScript con URLSearchParams
- Cómo eliminar todo el CSS de una página a la vez
- Cómo utilizar insertAdjectedHTML
- Safari, avisa antes de salir
- Cómo agregar una imagen al DOM usando JavaScript
- Cómo restablecer un formulario
- Cómo utilizar las fuentes de Google