Jak trwała jest pamięć localStorage?

102

W przypadku wtyczki, którą piszę, mocno polegam na localStorage. Wszystkie ustawienia użytkownika są w nim przechowywane. Niektóre ustawienia wymagają od użytkownika zapisywania wyrażeń regularnych i byłby smutny, gdyby ich reguły regex zniknęły w pewnym momencie. Więc teraz zastanawiam się, jak trwałe jest localStorage.

Ze specyfikacji :

Klienty użytkownika powinny wygasać dane z lokalnych obszarów przechowywania tylko ze względów bezpieczeństwa lub na żądanie użytkownika.

Powyższe wygląda na to, że działa jak pliki cookie po stronie klienta. To znaczy, gdy użytkownik wyczyści wszystkie dane przeglądarki (historia, pliki cookie, pamięć podręczna itp.), LocalStorage również zostanie obcięty. Czy to założenie jest słuszne?

PeeHaa
źródło
1
Biorąc pod uwagę, że przeglądarki decydują o tym, co stanowi „powód bezpieczeństwa”, w idealnym świecie nie można by zakładać, że potrwa to bardzo długo. Jednak prawdopodobnie można bezpiecznie założyć, że będzie on trwał do momentu, gdy użytkownik wyraźnie go opróżni.
Corbin
1
Tylko jedno ostrzeżenie podczas korzystania z localStorage: wydaje się, że nie działa niezawodnie w Firefoksie 39, 38 i 37 (nie sprawdzaliśmy niczego starszego). Na około 1% maszyn naszego użytkownika, localStorage gubi się czasami w trakcie przeglądania naszej strony, podczas gdy sesyjny plik cookie jest zachowywany. Wydaje mi się, że to błąd.
Andreas
1
@PeeHaa, to nie tylko działa jak pliki cookie, ale jest również prawnie zdefiniowane jako „pliki cookie” . W rzeczywistości informacje o przechowywaniu są wyświetlane obok innych plików cookie w chrome:settings/cookies
adresie

Odpowiedzi:

69

Mozilla implementuje to jak pliki cookie:

Magazyn DOM można wyczyścić za pomocą opcji „Narzędzia -> Wyczyść historię ostatnich -> Pliki cookie”, gdy zakres czasu to „Wszystko” (przez nsICookieManager :: removeAll)

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

W DOM Storage nie ma możliwości określenia okresu ważności jakichkolwiek danych. Wszystkie reguły wygasania pozostają w gestii użytkownika. W przypadku Mozilli większość z tych reguł jest dziedziczona z reguł wygaśnięcia związanych z plikami cookie. Z tego powodu prawdopodobnie możesz oczekiwać, że większość danych DOM Storage będzie trwać przynajmniej przez znaczący czas.

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

Chrome implementuje to jak pamięć podręczną:

LocalStorage nie jest bezpiecznym magazynem

Lokalna pamięć HTML5 zapisuje niezaszyfrowane dane w postaci ciągów w zwykłej pamięci podręcznej przeglądarki .

Trwałość

Na dysku do momentu usunięcia przez użytkownika (usuń pamięć podręczną) lub przez aplikację

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


Jeśli chodzi o „zamiennik Cookie”, nie do końca

Pliki cookie i pamięć lokalna naprawdę służą innym celom. Pliki cookie służą głównie do odczytu po stronie serwera, LocalStorage można odczytać tylko po stronie klienta. Pytanie brzmi więc, kto potrzebuje tych danych w Twojej aplikacji - klient czy serwer?

Józef
źródło
1
Myślę, że ten link MDN wyjaśnił bardziej jasno.
Bo Lu
17

Zasadniczo należy nie w dużym stopniu zależą od Local Storage.

Local Storage, wraz z Session Storage, ma na celu zastąpienie plików cookie, definiując bardziej spójne API. Istnieje kilka różnic w stosunku do plików cookie:

  • Chociaż pliki cookie są dostępne zarówno po stronie klienta, jak i serwera, magazyn w sieci Web, w szczególności, w szczególności magazyn lokalny, jest dostępny tylko po stronie klienta.
  • Zwiększona pojemność (oficjalnie dla plików cookie to 4 KB) do ponad 5 MB na domenę (Firefox, Google Chrome i Opera oraz 10 MB w IE).

Więc tak , twoje założenie jest poprawne.

Daniel Ribeiro
źródło
1
+1 - dlatego użyłbym lokalnej pamięci jako pamięci podręcznej i kopii zapasowej danych użytkownika na serwerze. (Oczywiście przy założeniu, że istnieje mechanizm logowania).
josh3736,
2
Basically, you should not heavily depend on Local Storage.... Absolutnie !!
Tenali Raman
7

Jedna uwaga dotycząca korzystania z pamięci lokalnej. Jest to bardzo specyficzne dla przeglądarki. Jeśli przechowujesz dane w przeglądarce Firefox, nie będą one dostępne w chrome lub np. Itp. Ponadto, jeśli chodzi o czyszczenie plików cookie i sesji, zauważyłem, że jest to również zależne od przeglądarki, czy pamięć lokalna jest wyczyszczona, czy nie. Zajmę się szczegółami, jeśli naprawdę planujesz polegać na lokalnej pamięci dla aplikacji.

Łukasz
źródło
14
Czy nie dotyczy to również ciasteczek?
Jeffrey Sweeney,
3
Dotyczy to również plików cookie.
Moshe L
Nie, niekoniecznie dotyczy to plików cookie: w systemie OSX aplikacje korzystające z Webkit wydają się udostępniać pliki cookie. Chociaż mogę źle interpretować efekty.
Thomas Tempelmann
Z drugiej strony pisze wtyczkę, która, jak zakładam, jest specyficzna dla przeglądarki.
GuyT,
5

Magazyn lokalny został zaprojektowany jako niezawodny, trwały magazyn danych na kliencie. Nie jest zaprojektowany jako „lepszy plik cookie”: ta funkcja została zaprojektowana tak, aby spełniała ją Session Storage.

Od rekomendacji dla kandydatów do przechowywania danych w sieci Web z grudnia 2011 r.

(Pamięć lokalna) jest przeznaczona do przechowywania danych obejmujących wiele okien i trwających poza bieżącą sesją. W szczególności aplikacje sieci Web mogą chcieć przechowywać megabajty danych użytkownika, takich jak całe dokumenty utworzone przez użytkownika lub skrzynka pocztowa użytkownika, po stronie klienta ze względu na wydajność.

Jako dane po stronie klienta - są tak trwałe, jak wszystkie dane po stronie klienta, w granicach rozmiaru implementowanych przez przeglądarkę. Użytkownicy mogą go w każdej chwili usunąć, otworzyć w edytorze tekstu i edytować itp. - tak jak DOWOLNE dane po stronie klienta.

Michael Mullany
źródło
1
Być może zmieniło się to od czasu Twojego oryginalnego posta 8 lat temu, ale pamięć lokalna może być w dużym stopniu używana jako zamiennik plików cookie (gdzie wymagany jest dostęp tylko po stronie klienta). Magazyn sesji nie może. Magazyn sesji jest usuwany natychmiast po zamknięciu przeglądarki.
Brad
3

Jeśli używasz localStorage dla aplikacji na iOS, bądź bardzo ostrożny. Najnowsza wersja iOS (5.1) przeniosła dane localstorage i localdb do części pamięci podręcznej, która jest regularnie czyszczona, czyli wcale nie jest trwała. Nie mogę jeszcze powiedzieć, czy jest to błąd, czy zmiana zasad.

Wytze
źródło
2
Uważam, że dotyczy to WebViews, ale nie Safari.
Trott