¿Qué tan persistente es localStorage?

100

Depende mucho de localStorage para un complemento que estoy escribiendo. Todas las configuraciones del usuario se almacenan en él. Algunas configuraciones requieren que el usuario escriba las expresiones regulares y estarían tristes si sus reglas de expresiones regulares desaparecen en algún momento. Así que ahora me pregunto qué tan persistente es el localStorage.

De las especificaciones :

Los agentes de usuario deben caducar los datos de las áreas de almacenamiento local solo por razones de seguridad o cuando el usuario lo solicite.

Lo anterior parece que funciona igual que las cookies en el lado del cliente. Es decir, cuando el usuario borra todos los datos del navegador (historial, cookies, caché, etc.), localStorage también se truncará. ¿Es esta suposición correcta?

PeeHaa
fuente
1
Teniendo en cuenta que los navegadores pueden decidir qué constituye una "razón de seguridad", en un mundo ideal no asumiría que durará mucho. Sin embargo, probablemente sea seguro asumir que persiste hasta que un usuario lo vacíe explícitamente.
Corbin
1
Solo una advertencia al usar localStorage: no parece funcionar de manera confiable en Firefox 39, 38 y 37 (no verificamos nada más antiguo). En aproximadamente el 1% de las máquinas de nuestros usuarios, el localStorage se pierde a veces en medio de la navegación por nuestro sitio, mientras que la cookie de sesión se conserva. Me parece como un insecto.
Andreas
1
@PeeHaa, no solo funciona como cookies, sino que también se define legalmente como "cookies" . De hecho, la información de almacenamiento se muestra junto con otras cookies en la URLchrome:settings/cookies
Pacerier

Respuestas:

69

Mozilla lo implementa como cookies:

El almacenamiento DOM se puede borrar a través de "Herramientas -> Borrar historial reciente -> Cookies" cuando el rango de tiempo es "Todo" (a través de nsICookieManager :: removeAll)

https://developer.mozilla.org/en/DOM/Storage

En DOM Storage no es posible especificar un período de vencimiento para ninguno de sus datos. Todas las reglas de caducidad se dejan en manos del usuario. En el caso de Mozilla, la mayoría de esas reglas se heredan de las reglas de caducidad relacionadas con las cookies. Debido a esto, probablemente puede esperar que la mayoría de sus datos de almacenamiento DOM duren al menos una cantidad de tiempo significativa.

http://ejohn.org/blog/dom-storage/

Chrome lo implementa como caché:

LocalStorage no es un almacenamiento seguro

El almacenamiento local HTML5 guarda los datos sin cifrar en forma de cadena en la memoria caché normal del navegador .

Persistencia

En el disco hasta que lo elimine el usuario (eliminar caché) o la aplicación

https://developers.google.com/web-toolkit/doc/latest/DevGuideHtml5Storage


En cuanto a un "reemplazo de la cookie", no del todo

Las cookies y el almacenamiento local realmente tienen propósitos diferentes. Las cookies son principalmente para leer en el lado del servidor, LocalStorage solo se puede leer en el lado del cliente. Entonces, la pregunta es, en su aplicación, ¿quién necesita estos datos: el cliente o el servidor?

Joseph
fuente
1
Creo que este enlace de MDN se explicó más claro.
Bo Lu
17

Básicamente, usted debe no dependen en gran medida de almacenamiento local.

El almacenamiento local, junto con el almacenamiento de sesiones, pretende ser un reemplazo de las cookies, definiendo una API más consistente. Hay algunas diferencias con las cookies:

  • Si bien se puede acceder a las cookies tanto desde el lado del cliente como desde el servidor, el almacenamiento web, en general, y el almacenamiento local, en particular, son accesibles solo desde el lado del cliente.
  • Capacidad mejorada (el oficial para cookies es de 4 KB) a más de 5 MB por dominio (Firefox, Google Chrome y Opera y 10 MB en IE).

Entonces , tu suposición es correcta.

Daniel Ribeiro
fuente
1
+1: esta es la razón por la que usaría el almacenamiento local como caché y respaldaría los datos del usuario en el servidor. (Por supuesto, eso supone que hay un mecanismo de inicio de sesión en su lugar).
josh3736
2
Basically, you should not heavily depend on Local Storage.... ¡¡Absolutamente !!
Tenali Raman
7

Una cosa a tener en cuenta sobre el uso de almacenamiento local. Es muy específico del navegador. Si almacena datos con Firefox, no estarán disponibles en Chrome o ie, etc. Además, en cuanto a borrar cookies y sesiones, he notado que también es específico del navegador si se borra o no el almacenamiento local. Analizaría mucho los detalles si realmente planeas confiar en el almacenamiento local para una aplicación.

Luke
fuente
14
¿No es esto también cierto con las cookies?
Jeffrey Sweeney
3
Esto también es válido para las cookies.
Moshe L
No, esto no es necesariamente cierto para las cookies: en OSX, las aplicaciones que usan Webkit parecen compartir cookies en mi experiencia. Aunque puedo estar malinterpretando los efectos.
Thomas Tempelmann
Por otro lado, está escribiendo un complemento que, supongo, es específico del navegador.
GuyT
5

El almacenamiento local está diseñado para ser un almacenamiento de datos confiable y persistente en un cliente. No está diseñado como una "mejor cookie": esa función está diseñada para ser cumplida por Session Storage.

De la recomendación candidata a especificaciones de almacenamiento web de diciembre de 2011 ,

(Almacenamiento local) está diseñado para un almacenamiento que abarca varias ventanas y dura más allá de la sesión actual. En particular, las aplicaciones web pueden desear almacenar megabytes de datos del usuario, como documentos completos creados por el usuario o el buzón de un usuario, en el lado del cliente por razones de rendimiento.

Como datos del lado del cliente, es tan persistente como cualquier dato del lado del cliente, dentro de los límites de tamaño que implementa el navegador. Los usuarios pueden eliminarlo en cualquier momento, abrirlo en un editor de texto y editarlo, etc., como CUALQUIER dato del lado del cliente.

Michael Mullany
fuente
1
Quizás esto haya cambiado desde su publicación original hace 8 años, pero el almacenamiento local puede usarse como un reemplazo de las cookies (donde solo se necesita acceso del lado del cliente). El almacenamiento de sesiones no puede. El almacenamiento de sesiones se elimina tan pronto como se cierra el navegador.
Brad
3

Si está utilizando localStorage para una aplicación de iOS, tenga mucho cuidado. La última versión de iOS (5.1 fuera de mi cabeza) ha movido los datos de almacenamiento local y localdb a una parte de la caché que se borra regularmente, es decir, no es en absoluto persistente. Todavía no puedo decir si esto es un error o un cambio de política.

Wytze
fuente
2
Creo que esto es cierto para WebViews pero no para Safari.
Trott