Wie beständig ist localStorage?

100

Ich bin stark von localStorage für ein Plugin abhängig, das ich schreibe. Alle Benutzereinstellungen werden darin gespeichert. Einige Einstellungen erfordern, dass der Benutzer die regulären Regexe schreibt, und sie wären traurig, wenn ihre Regex-Regeln irgendwann weg wären. Jetzt frage ich mich, wie beständig der localStorage ist.

Aus den Spezifikationen :

Benutzeragenten sollten Daten aus den lokalen Speicherbereichen nur aus Sicherheitsgründen oder auf Aufforderung des Benutzers ablaufen lassen.

Das Obige sieht genauso aus wie Cookies auf der Clientseite. Das heißt, wenn der Benutzer alle Browserdaten (Verlauf, Cookies, Cache usw.) löscht, wird der localStorage ebenfalls abgeschnitten. Ist diese Annahme richtig?

PeeHaa
quelle
1
Wenn man bedenkt, dass Browser entscheiden können, was ein "Sicherheitsgrund" ist, würde man in einer idealen Welt nicht davon ausgehen, dass dies sehr lange dauern wird. Es ist jedoch wahrscheinlich sicher anzunehmen, dass es bestehen bleibt, bis ein Benutzer es explizit löscht.
Corbin
1
Nur eine Warnung bei Verwendung von localStorage: Es scheint in Firefox 39, 38 und 37 nicht zuverlässig zu funktionieren (wir haben nichts Älteres überprüft). Auf etwa 1% der Computer unserer Benutzer geht der localStorage manchmal beim Surfen auf unserer Website verloren, während das Sitzungscookie beibehalten wird. Scheint mir ein Fehler zu sein.
Andreas
1
@PeeHaa, es nicht bloß funktionieren wie Cookies, sind aber als „Cookies“ rechtlich definiert zu. In der Tat werden Speicherinformationen direkt neben anderen Cookies in der URL chrome:settings/cookies
angezeigt

Antworten:

69

Mozilla implementiert es wie Cookies:

Der DOM-Speicher kann über "Extras -> Zuletzt verwendeten Verlauf löschen -> Cookies" gelöscht werden, wenn der Zeitbereich "Alles" ist (über nsICookieManager :: removeAll).

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

Im DOM-Speicher kann für keine Ihrer Daten ein Ablaufzeitraum angegeben werden. Alle Ablaufregeln bleiben dem Benutzer überlassen. Im Fall von Mozilla werden die meisten dieser Regeln von den Cookie-bezogenen Ablaufregeln übernommen. Aus diesem Grund können Sie wahrscheinlich erwarten, dass die meisten Ihrer DOM-Speicherdaten mindestens eine sinnvolle Zeitdauer haben.

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

Chrome implementiert es wie einen Cache:

LocalStorage ist kein sicherer Speicher

Der lokale HTML5-Speicher speichert Daten unverschlüsselt in Zeichenfolgenform im regulären Browser-Cache .

Beharrlichkeit

Auf der Festplatte, bis sie vom Benutzer (Cache löschen) oder von der App gelöscht wird

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


Was einen "Ersatz für das Cookie" betrifft, nicht ganz

Cookies und lokale Speicherung dienen wirklich unterschiedlichen Zwecken. Cookies dienen hauptsächlich zum Lesen auf der Serverseite. LocalStorage kann nur auf der Clientseite gelesen werden. Die Frage ist also in Ihrer App, wer diese Daten benötigt - der Client oder der Server?

Joseph
quelle
1
Ich denke, dieser MDN-Link wurde klarer erklärt.
Bo Lu
17

Grundsätzlich sollten Sie nicht stark vom lokalen Speicher abhängig sein.

Der lokale Speicher soll zusammen mit dem Sitzungsspeicher die Cookies ersetzen und eine konsistentere API definieren. Es gibt einige Unterschiede zu den Cookies:

  • Während auf die Cookies sowohl vom Client als auch vom Server aus zugegriffen werden kann, sind Web Storage im Allgemeinen und Local Storage im Besonderen nur vom Client aus zugänglich.
  • Erweiterte Kapazität (offiziell für Cookies 4 KB) auf mehr als 5 MB pro Domain (Firefox, Google Chrome und Opera und 10 MB im IE).

Also ja , Ihre Annahme ist richtig.

Daniel Ribeiro
quelle
1
+1 - Aus diesem Grund würde ich den lokalen Speicher als Cache verwenden und Benutzerdaten auf dem Server sichern. (
Dies
2
Basically, you should not heavily depend on Local Storage.... Absolut !!
Tenali Raman
7

Eine Sache, die Sie bei der Verwendung von lokalem Speicher beachten sollten. Es ist sehr browserspezifisch. Wenn Sie Daten mit Firefox speichern, sind diese nicht in Chrome oder zB usw. verfügbar. Auch beim Löschen von Cookies und Sitzungen ist mir aufgefallen, dass es auch browserspezifisch ist, ob der lokale Speicher gelöscht wird oder nicht. Ich würde viel in die Details schauen, wenn Sie wirklich vorhaben, sich für eine App auf lokalen Speicher zu verlassen.

Luke
quelle
14
Gilt das nicht auch für Cookies?
Jeffrey Sweeney
3
Dies gilt auch für Cookies.
Moshe L
Nein, dies gilt nicht unbedingt für Cookies: Unter OSX scheinen Apps, die Webkit verwenden, nach meiner Erfahrung Cookies zu teilen. Obwohl ich Effekte möglicherweise falsch interpretiere.
Thomas Tempelmann
Andererseits schreibt er ein Plugin, das, wie ich annehme, browserspezifisch ist.
GuyT
5

Der lokale Speicher ist als zuverlässiger, dauerhafter Datenspeicher auf einem Client konzipiert. Es ist nicht als "besseres Cookie" konzipiert: Diese Funktion wird vom Sitzungsspeicher erfüllt.

Aus der Empfehlung des Web Storage Spec Candidate vom Dezember 2011 ,

(Lokaler Speicher) ist für Speicher konzipiert, der sich über mehrere Fenster erstreckt und über die aktuelle Sitzung hinausgeht. Insbesondere möchten Webanwendungen aus Leistungsgründen möglicherweise Megabyte an Benutzerdaten, z. B. ganze vom Benutzer erstellte Dokumente oder das Postfach eines Benutzers, auf der Clientseite speichern.

Als clientseitige Daten sind sie innerhalb der vom Browser implementierten Größenbeschränkungen genauso persistent wie alle clientseitigen Daten. Benutzer können es jederzeit löschen, in einem Texteditor öffnen und bearbeiten usw. - genau wie bei JEDEN clientseitigen Daten.

Michael Mullany
quelle
1
Vielleicht hat sich dies seit Ihrem ursprünglichen Beitrag vor 8 Jahren geändert, aber Local Storage kann sehr häufig als Ersatz für Cookies verwendet werden (wo nur clientseitiger Zugriff erforderlich ist). Sitzungsspeicher kann nicht. Der Sitzungsspeicher wird gelöscht, sobald der Browser geschlossen wird.
Brad,
3

Wenn Sie localStorage für eine iOS-App verwenden, seien Sie sehr vorsichtig. Die neueste Version von iOS (5.1) hat localstorage- und localdb-Daten in einen Teil des Caches verschoben, der regelmäßig gelöscht wird, dh überhaupt nicht dauerhaft ist. Ich kann noch nicht sagen, ob dies ein Fehler oder eine Richtlinienänderung ist.

Wytze
quelle
2
Ich glaube, dass dies für WebViews gilt, aber nicht für Safari.
Trott