Quelle est la persistance de localStorage?

102

Je dépends fortement de localStorage pour un plugin que j'écris. Tous les paramètres utilisateur y sont stockés. Certains paramètres exigent de l'utilisateur les expressions régulières d'écriture et ils seraient tristes si leurs règles d'expression régulière disparaissent à un moment donné. Alors maintenant, je me demande à quel point le localStorage est persistant.

D'après les spécifications :

Les agents utilisateurs doivent expirer les données des zones de stockage locales uniquement pour des raisons de sécurité ou à la demande de l'utilisateur.

Ce qui précède semble fonctionner comme les cookies côté client. C'est-à-dire que lorsque l'utilisateur efface toutes les données du navigateur (historique, cookies, cache, etc.), le localStorage sera également tronqué. Cette hypothèse est-elle correcte?

PeeHaa
la source
1
Étant donné que les navigateurs peuvent décider de ce qui constitue une «raison de sécurité», dans un monde idéal, vous ne supposeriez pas que cela durera très longtemps. Cependant, il est probablement prudent de supposer qu'il persiste jusqu'à ce qu'un utilisateur le vide explicitement.
Corbin
1
Juste un avertissement lors de l'utilisation de localStorage: il ne semble pas fonctionner de manière fiable dans Firefox 39, 38 et 37 (nous n'avons rien vérifié de plus ancien). Sur environ 1% des machines de nos utilisateurs, le localStorage se perd parfois au milieu de la navigation sur notre site, tandis que le cookie de session est conservé. Ça ressemble à un bug pour moi.
Andreas
1
@PeeHaa, Il ne se contente pas travailler comme les cookies, mais sont définis comme des « cookies » aussi. En fait, les informations de stockage sont affichées juste à côté d'autres cookies dans l'urlchrome:settings/cookies
Pacerier

Réponses:

69

Mozilla l'implémente comme des cookies:

Le stockage DOM peut être effacé via "Outils -> Effacer l'historique récent -> Cookies" lorsque la plage de temps est "Tout" (via nsICookieManager :: removeAll)

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

Dans DOM Storage, il n'est pas possible de spécifier une période d'expiration pour aucune de vos données. Toutes les règles d'expiration sont laissées à la discrétion de l'utilisateur. Dans le cas de Mozilla, la plupart de ces règles sont héritées des règles d'expiration liées aux cookies. Pour cette raison, vous pouvez probablement vous attendre à ce que la plupart de vos données de stockage DOM durent au moins pendant une durée significative.

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

Chrome l'implémente comme un cache:

LocalStorage n'est pas un stockage sécurisé

Le stockage local HTML5 enregistre les données non chiffrées sous forme de chaîne dans le cache normal du navigateur .

Persistance

Sur le disque jusqu'à ce qu'il soit supprimé par l'utilisateur (supprimer le cache) ou par l'application

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


Quant au "remplacement du cookie", pas entièrement

Les cookies et le stockage local servent vraiment à des fins différentes. Les cookies sont principalement destinés à la lecture côté serveur, LocalStorage ne peut être lu que côté client. La question est donc, dans votre application, qui a besoin de ces données - le client ou le serveur?

Joseph
la source
1
Je pense que ce lien MDN a expliqué plus clairement.
Bo Lu
17

Fondamentalement, vous ne devriez pas dépendre fortement du stockage local.

Le stockage local, avec le stockage de session, vise à remplacer les cookies, définissant une API plus cohérente. Il existe quelques différences avec les cookies:

  • Alors que les cookies sont accessibles à la fois du côté client et du côté serveur, le stockage Web, en général, et le stockage local, en particulier, ne sont accessibles que du côté client.
  • Capacité améliorée (officielle pour les cookies de 4 Ko) à plus de 5 Mo par domaine (Firefox, Google Chrome et Opera et 10 Mo dans IE).

Alors oui , votre hypothèse est correcte.

Daniel Ribeiro
la source
1
+1 - c'est pourquoi j'utiliserais le stockage local comme cache et sauvegarderait les données utilisateur sur le serveur. (Bien sûr, cela suppose qu'un mécanisme de connexion est en place.)
josh3736
2
Basically, you should not heavily depend on Local Storage.... Absolument !!
Tenali Raman
7

Une chose à noter à propos de l'utilisation du stockage local. C'est très spécifique au navigateur. Si vous stockez des données avec Firefox, elles ne seront pas disponibles dans Chrome, etc. J'examinerais beaucoup les détails si vous prévoyez vraiment de vous fier au stockage local pour une application.

Luke
la source
14
N'est-ce pas également vrai avec les cookies?
Jeffrey Sweeney
3
Cela vaut également pour les cookies.
Moshe L
Non, ce n'est pas nécessairement vrai pour les cookies: sur OSX, les applications utilisant Webkit semblent partager des cookies selon mon expérience. Bien que je puisse mal interpréter les effets.
Thomas Tempelmann
D'un autre côté, il écrit un plugin qui, je suppose, est spécifique au navigateur.
GuyT
5

Le stockage local est conçu pour être un stockage fiable et persistant de données sur un client. Il n'est pas conçu comme un "meilleur cookie": cette fonction est conçue pour être remplie par Session Storage.

À partir de la recommandation de candidat aux spécifications de stockage Web de décembre 2011 ,

(Stockage local) est conçu pour le stockage qui s'étend sur plusieurs fenêtres et dure au-delà de la session en cours. En particulier, les applications Web peuvent souhaiter stocker des mégaoctets de données utilisateur, telles que des documents entièrement créés par l'utilisateur ou la boîte aux lettres d'un utilisateur, du côté client pour des raisons de performances.

En tant que données côté client - elles sont aussi persistantes que toutes les données côté client, dans les limites de taille implémentées par le navigateur. Les utilisateurs peuvent le supprimer à tout moment, l'ouvrir dans un éditeur de texte et le modifier, etc. - tout comme TOUTES les données côté client.

Michael Mullany
la source
1
Cela a peut-être changé depuis votre publication d'origine il y a 8 ans, mais le stockage local peut très bien être utilisé en remplacement des cookies (où un accès uniquement côté client est nécessaire). Le stockage de session ne peut pas. Le stockage de session est supprimé dès que le navigateur est fermé.
Brad le
3

Si vous utilisez localStorage pour une application iOS, soyez très prudent. La dernière version d'iOS (5.1 au dessus de ma tête) a déplacé les données localstorage et localdb vers une partie du cache qui est régulièrement effacée, c'est-à-dire pas du tout persistante. Je ne peux pas encore dire s'il s'agit d'un bug ou d'un changement de politique.

Wytze
la source
2
Je pense que cela est vrai pour les WebViews mais pas pour Safari.
Trott