Jak długo dostępne są dane przechowywane w localStorage (jako część DOM Storage w HTML5)? Czy mogę ustawić czas wygaśnięcia danych, które umieszczam w localStorage?
javascript
html
local-storage
użytkownik280427
źródło
źródło
Odpowiedzi:
Nie można określić terminu ważności. To zależy całkowicie od użytkownika.
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Oczywiście możliwe jest, że coś, co aplikacja przechowuje na kliencie, może nie być później. Użytkownik może jawnie pozbyć się lokalnej pamięci lub przeglądarka może zostać wykorzystana w związku z przestrzenią. Dobrze jest programować defensywnie. Ogólnie jednak rzeczy pozostają „na zawsze” na podstawie praktycznej definicji tego słowa.
edytuj - oczywiście twoja aplikacja może aktywnie usuwać rzeczy, jeśli uzna, że są za stare. Oznacza to, że możesz jawnie zawrzeć jakiś znacznik czasu w tym, co zostało zapisane, a następnie użyć go później, aby zdecydować, czy informacje powinny zostać usunięte.
źródło
Sugerowałbym przechowywanie znacznika czasu w obiekcie przechowywanym w localStorage
Możesz parsować obiekt, uzyskać znacznik czasu i porównać z bieżącą datą, aw razie potrzeby zaktualizować wartość obiektu.
źródło
settimout
Co 5 sekund) lub dla każdego żądania wysyłanego przez klienta do serwera?Możesz użyć lscache . Obsługuje to automatycznie, w tym przypadki, w których rozmiar pamięci przekracza limit. Jeśli tak się stanie, zacznie przycinać przedmioty, które są najbliżej ich określonego terminu ważności.
Z
readme
:Jest to jedyna prawdziwa różnica między zwykłymi metodami przechowywania. Pobierz, usuń itp. Działają tak samo.
Jeśli nie potrzebujesz takiej funkcjonalności, możesz po prostu zapisać znacznik czasu z wartością (za pośrednictwem JSON) i sprawdzić, czy upłynął termin ważności.
Warto zauważyć, że istnieje dobry powód, dla którego lokalne przechowywanie należy do użytkownika. Ale rzeczy takie jak lscache przydają się, gdy trzeba przechowywać ekstremalnie tymczasowe dane.
źródło
Brynner Ferreira przyniósł dobry punkt: przechowywanie klucza rodzeństwa, w którym znajdują się informacje o wygaśnięciu. W ten sposób, jeśli masz dużą liczbę kluczy lub jeśli twoje wartości są dużymi obiektami Json , nie musisz ich analizować, aby uzyskać dostęp do znacznika czasu.
Oto ulepszona wersja:
źródło
else
być liniaexpires = Math.abs(1000*expires); //make sure it's positive
?getStorage
rozmowy. Jeśli spróbujesz uzyskać_expiresIn
bezpośredni dostęp do wersji klucza, wówczas klucz staje się tym,..._expiresIn_expiresIn
który oczywiście nie istnieje, więc usuwa oryginalny..._expiresIn
klucz, a następnie przy następnym dostępie do oryginalnego klucza,..._expiresIn
nie istnieje i usuwa oryginalny klucz. Sugerowałbym pułapkę za to, gdy natrafiłem na to w jednym z moich projektów.if(key.indexOf('_expiresIn') > -1) { return localStorage.getItem(key); }
Chociaż lokalne przechowywanie nie zapewnia mechanizmu wygasania, pliki cookie to robią. Po prostu sparowanie lokalnego klucza pamięci z ciasteczkiem zapewnia prosty sposób na zapewnienie, że pamięć lokalna może zostać zaktualizowana o te same parametry wygasania, co ciasteczka.
Przykład w jQuery:
W tym przykładzie plik cookie z domyślnym parametrem wygasa po zamknięciu przeglądarki. Dlatego po zamknięciu i ponownym otwarciu przeglądarki lokalny magazyn danych dla twoich danych jest odświeżany przez wywołanie po stronie serwera.
Pamiętaj, że nie jest to dokładnie to samo, co usunięcie lokalnego magazynu danych, ale aktualizuje lokalny magazyn danych za każdym razem, gdy plik cookie wygasa. Jeśli jednak Twoim głównym celem jest możliwość przechowywania po stronie klienta więcej niż 4K (ograniczenie rozmiaru pliku cookie), ta para plików cookie i pamięci lokalnej pomoże Ci osiągnąć większy rozmiar pamięci przy użyciu tych samych parametrów wygasania jak plik cookie .
źródło
kliknij tutaj, aby wyświetlić interfejs API
źródło
sessionStorage
nie działa udostępnianie danych między kartamiCykl życia jest kontrolowany przez aplikację / użytkownika.
Od standardu :
źródło
Z projektu W3C:
Będziesz chciał dokonywać aktualizacji zgodnie z harmonogramem, używając setItem (klucz, wartość); spowoduje to dodanie lub aktualizację danego klucza o nowe dane.
źródło
źródło
Jeśli ktoś używa wtyczki jStorage z jQuery, można dodać wygasanie za pomocą funkcji setTTL, jeśli wtyczka jStorage
źródło
Jeśli ktoś nadal szuka szybkiego rozwiązania i nie chce zależności, takich jak jquery itp., Napisałem mini lib, który dodaje wygasanie do pamięci lokalnej / sesji / niestandardowej, możesz go znaleźć tutaj:
https://github.com/RonenNess/ExpiredStorage
źródło
Możesz spróbować tego.
źródło
Obejście problemu przy użyciu narzędzia kątowego i lokalnego:
źródło
localforage
.expireTimeInMilliseconds
nie jest jakimślocalforage
atrybutem, ale zmienną, której użyłem do sprawdzenia, czy przechowywane dane muszą wygasnąć. Sprawdźget
definicję funkcji na moim przykładzie.localforage
nie jest lekką klasą pomocnika, której się spodziewałemPodejście @ sebarmeli jest moim zdaniem najlepsze, ale jeśli chcesz, aby dane były przechowywane przez cały czas trwania sesji,
sessionStorage
prawdopodobnie jest to lepsza opcja:MDN: sessionStorage
źródło
Z korzyścią dla wyszukiwarek:
Podobnie jak Fernando, nie chciałem dodawać ładunku JSON, gdy przechowywane wartości były proste. Musiałem tylko śledzić niektóre interakcje w interfejsie użytkownika i dbać o to, by dane były odpowiednie (np. Jak użytkownik korzystał z witryny e-commerce przed sprawdzeniem).
Nie spełni to wszystkich kryteriów, ale mam nadzieję, że będzie to szybki start + kopiowanie i wklejanie dla kogoś i zapisanie dodawania kolejnej biblioteki.
UWAGA: Nie byłoby to dobre, gdybyś musiał odzyskać przedmioty indywidualnie.
źródło
Jeśli znasz obiekt locaStorage przeglądarki , wiesz, że nie ma możliwości zapewnienia czasu wygaśnięcia. Możemy jednak użyć Javascript, aby dodać TTL (czas życia), aby unieważnić elementy w locaStorage po upływie określonego czasu.
źródło