Wie lange sind Daten in localStorage (als Teil des DOM-Speichers in HTML5) verfügbar? Kann ich eine Ablaufzeit für die Daten festlegen, die ich in localStorage eingefügt habe?
javascript
html
local-storage
user280427
quelle
quelle
Antworten:
Es ist nicht möglich, den Ablauf anzugeben. Es liegt ganz beim Benutzer.
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Natürlich ist es möglich, dass etwas, das Ihre Anwendung auf dem Client speichert, später nicht mehr vorhanden ist. Der Benutzer kann den lokalen Speicher explizit entfernen, oder der Browser kann auf Speicherplatzprobleme stoßen. Es ist gut, defensiv zu programmieren. Im Allgemeinen bleiben die Dinge jedoch "für immer", basierend auf einer praktischen Definition dieses Wortes.
Bearbeiten - Natürlich kann Ihre eigene Anwendung Inhalte aktiv entfernen, wenn sie zu alt ist. Das heißt, Sie können explizit eine Art Zeitstempel in das, was Sie gespeichert haben, einfügen und diesen später verwenden, um zu entscheiden, ob Informationen gelöscht werden sollen oder nicht.
quelle
Ich würde vorschlagen, den Zeitstempel in dem Objekt zu speichern, das Sie im localStorage speichern
Sie können das Objekt analysieren, den Zeitstempel abrufen und mit dem aktuellen Datum vergleichen und bei Bedarf den Wert des Objekts aktualisieren.
quelle
settimout
alle 5 Sekunden) oder für jede Anforderung, die der Client an den Server sendet, analysieren und vergleichen ?Sie können lscache verwenden . Dies wird automatisch für Sie erledigt, einschließlich der Fälle, in denen die Speichergröße den Grenzwert überschreitet. In diesem Fall werden Elemente beschnitten, die dem angegebenen Ablauf am nächsten kommen.
Aus dem
readme
:Dies ist der einzige wirkliche Unterschied zwischen den regulären Speichermethoden. Holen, entfernen, usw. funktionieren gleich.
Wenn Sie nicht so viele Funktionen benötigen, können Sie einfach einen Zeitstempel mit dem Wert (über JSON) speichern und auf Ablauf prüfen.
Bemerkenswerterweise gibt es einen guten Grund, warum der lokale Speicher dem Benutzer überlassen bleibt. Dinge wie lscache sind jedoch nützlich, wenn Sie extrem temporäre Daten speichern müssen.
quelle
Brynner Ferreira hat einen guten Punkt gebracht: Speichern eines Geschwisterschlüssels, in dem sich die Ablaufinformationen befinden. Auf diese Weise müssen Sie , wenn Sie über eine große Anzahl von Schlüsseln verfügen oder wenn Ihre Werte große Json-Objekte sind , diese nicht analysieren, um auf den Zeitstempel zuzugreifen.
Hier folgt eine verbesserte Version:
quelle
else
Zeile in setStorage () nicht seinexpires = Math.abs(1000*expires); //make sure it's positive
?getStorage
Anruf. Wenn Sie versuchen,_expiresIn
direkt auf die Version des Schlüssels zuzugreifen , wird der Schlüssel zu..._expiresIn_expiresIn
dem, der natürlich nicht vorhanden ist, sodass der ursprüngliche..._expiresIn
Schlüssel entfernt wird. Wenn Sie das nächste Mal auf den ursprünglichen Schlüssel zugreifen, ist der Schlüssel..._expiresIn
nicht vorhanden und löscht das Original Schlüssel. Ich würde vorschlagen, dafür zu fangen, da ich in einem meiner Projekte darauf gestoßen bin.if(key.indexOf('_expiresIn') > -1) { return localStorage.getItem(key); }
Während der lokale Speicher keinen Ablaufmechanismus bietet, tun dies Cookies. Durch einfaches Koppeln eines lokalen Speicherschlüssels mit einem Cookie können Sie auf einfache Weise sicherstellen, dass der lokale Speicher mit denselben Ablaufparametern wie ein Cookie aktualisiert werden kann.
Beispiel in jQuery:
In diesem Beispiel wird ein Cookie mit dem Standardparameter festgelegt, der beim Schließen des Browsers abläuft. Wenn der Browser geschlossen und erneut geöffnet wird, wird der lokale Datenspeicher für Ihre_Daten durch einen serverseitigen Aufruf aktualisiert.
Beachten Sie, dass dies nicht genau mit dem Entfernen des lokalen Datenspeichers identisch ist. Stattdessen wird der lokale Datenspeicher aktualisiert, sobald das Cookie abläuft. Wenn Ihr Hauptziel jedoch darin besteht, mehr als 4 KB clientseitig speichern zu können (die Beschränkung für die Cookie-Größe), können Sie mit dieser Kombination aus Cookie und lokalem Speicher eine größere Speichergröße mit denselben Ablaufparametern wie ein Cookie erzielen .
quelle
Klicken Sie hier, um die API anzuzeigen
quelle
sessionStorage
nicht funktioniert, um Daten zwischen Registerkarten zu teilenDer Lebenszyklus wird von der Anwendung / dem Benutzer gesteuert.
Aus dem Standard :
quelle
Aus dem W3C-Entwurf:
Sie möchten Ihre Aktualisierungen in Ihrem Zeitplan mit setItem (Schlüssel, Wert) durchführen. Dadurch wird der angegebene Schlüssel entweder hinzugefügt oder mit den neuen Daten aktualisiert.
quelle
quelle
Wenn jemand das jStorage-Plugin von jQuery verwendet, kann es mit der Funktion setTTL zum Ablauf des jStorage-Plugins hinzugefügt werden
quelle
Wenn jemand immer noch nach einer schnellen Lösung sucht und keine Abhängigkeiten wie jquery usw. möchte, habe ich eine Mini-Bibliothek geschrieben, die dem lokalen / Sitzungs- / benutzerdefinierten Speicher einen Ablauf hinzufügt. Sie finden sie hier mit Quelle:
https://github.com/RonenNess/ExpiredStorage
quelle
Sie können diesen versuchen.
quelle
Problemumgehung mit eckigem und lokalem Futter:
quelle
localforage
.expireTimeInMilliseconds
ist keinlocalforage
Attribut, sondern eine Variable, mit der ich überprüft habe, ob die gespeicherten Daten abgelaufen sein müssen. Überprüfen Sie dieget
Funktionsdefinition in meinem Beispiel.localforage
ist nicht die leichte kleine@ sebarmelis Ansatz ist meiner Meinung nach der beste, aber wenn Sie nur möchten, dass Daten für die Dauer einer Sitzung erhalten bleiben,
sessionStorage
ist dies wahrscheinlich eine bessere Option:MDN: sessionStorage
quelle
Zum Nutzen der Suchenden:
Wie Fernando wollte ich keine Ladung json hinzufügen, wenn die gespeicherten Werte einfach waren. Ich musste nur einige Interaktionen mit der Benutzeroberfläche verfolgen und die Daten relevant halten (z. B. wie ein Benutzer eine E-Commerce-Website vor dem Auschecken verwendet hat).
Dies erfüllt nicht alle Kriterien, ist aber hoffentlich ein schneller Starter zum Kopieren und Einfügen für jemanden und spart das Hinzufügen einer weiteren Bibliothek.
HINWEIS: Dies ist nicht sinnvoll, wenn Sie die Elemente einzeln abrufen müssen.
quelle
Wenn Sie mit dem locaStorage-Objekt des Browsers vertraut sind , wissen Sie, dass keine Angabe einer Ablaufzeit vorgesehen ist . Wir können jedoch Javascript verwenden, um eine TTL (Time to Live) hinzuzufügen, um Elemente in locaStorage nach Ablauf einer bestimmten Zeitspanne ungültig zu machen.
quelle