Wie lange werden die Daten gespeichert in localStorage
(als Teil der DOM-Speicherung in HTML5) verfügbar? Kann ich eine Verfallszeit für die Daten festlegen, die ich in den lokalen Speicher lege?
Antworten
Zu viele Anzeigen?Während die lokale Speicherung keinen Verfallsmechanismus vorsieht, ist dies bei Cookies der Fall. Durch die einfache Verknüpfung eines Schlüssels für den lokalen Speicher mit einem Cookie kann auf einfache Weise sichergestellt werden, dass der lokale Speicher mit denselben Ablaufparametern wie ein Cookie aktualisiert werden kann.
Beispiel in jQuery:
if (!$.cookie('your_key') || !localStorage.getItem('your_key')) {
//get your_data from server, then...
localStorage.setItem('your_key', 'your_data' );
$.cookie('your_key', 1);
} else {
var your_data = localStorage.getItem('your_key');
}
// do stuff with your_data
In diesem Beispiel wird ein Cookie mit dem Standardparameter so gesetzt, dass es abläuft, wenn der Browser geschlossen wird. Wenn also der Browser geschlossen und wieder geöffnet wird, wird der lokale Datenspeicher für your_data durch einen serverseitigen Aufruf aktualisiert.
Beachten Sie, dass dies nicht genau dasselbe ist wie entfernen den lokalen Datenspeicher, sondern aktualisiert den lokalen Datenspeicher immer dann, wenn das Cookie abläuft. Wenn Ihr Hauptziel jedoch darin besteht, mehr als 4K clientseitig speichern zu können (die Begrenzung 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 bei einem Cookie erreichen.
Der Lebenszyklus wird von der Anwendung/dem Benutzer gesteuert.
Von der Standard :
Benutzeragenten sollten Daten aus den lokalen Speicherbereichen nur aus Sicherheitsgründen oder auf Anfrage des Benutzers löschen. Benutzer-Agenten sollten stets vermeiden, Daten zu löschen, während ein Skript läuft, das auf diese Daten zugreifen könnte.
Aus dem W3C-Entwurf:
Benutzeragenten sollten Daten aus den lokalen Speicherbereichen nur aus Sicherheitsgründen oder auf Aufforderung des Benutzers löschen. Benutzer-Agenten sollten stets vermeiden, Daten zu löschen, während ein Skript läuft, das auf diese Daten zugreifen könnte.
Sie werden Ihre Aktualisierungen in Ihrem Zeitplan mit setItem(key, value) vornehmen wollen; dadurch wird der angegebene Schlüssel entweder hinzugefügt oder mit den neuen Daten aktualisiert.
// Functions
function removeHtmlStorage(name) {
localStorage.removeItem(name);
localStorage.removeItem(name+'_time');
}
function setHtmlStorage(name, value, expires) {
if (expires==undefined || expires=='null') { var expires = 3600; } // default: 1h
var date = new Date();
var schedule = Math.round((date.setSeconds(date.getSeconds()+expires))/1000);
localStorage.setItem(name, value);
localStorage.setItem(name+'_time', schedule);
}
function statusHtmlStorage(name) {
var date = new Date();
var current = Math.round(+date/1000);
// Get Schedule
var stored_time = localStorage.getItem(name+'_time');
if (stored_time==undefined || stored_time=='null') { var stored_time = 0; }
// Expired
if (stored_time < current) {
// Remove
removeHtmlStorage(name);
return 0;
} else {
return 1;
}
}
// Status
var cache_status = statusHtmlStorage('cache_name');
// Has Data
if (cache_status == 1) {
// Get Cache
var data = localStorage.getItem('cache_name');
alert(data);
// Expired or Empty Cache
} else {
// Get Data
var data = 'Pay in cash :)';
alert(data);
// Set Cache (30 seconds)
if (cache) { setHtmlStorage('cache_name', data, 30); }
}
Wenn Sie mit den Browsern vertraut sind locaStorage-Objekt wissen Sie, dass es keine Möglichkeit gibt, eine Verfallszeit anzugeben. Wir können jedoch Javascript verwenden, um eine TTL (Time to live) hinzuzufügen, um Elemente in locaStorage nach Ablauf eines bestimmten Zeitraums ungültig zu machen.
function setLocalStorageItem(key, value, ttl) {
// `item` is an object which contains the original value
// as well as the time when it's supposed to expire
let item = {
value: value,
expiry: ttl ? Date.now() + ttl : null
};
localStorage.setItem(key, JSON.stringify(item));
}
function getLocalStorageItem(key) {
let item = localStorage.getItem(key);
// if the item doesn't exist, return null
if (!item) return null;
item = JSON.parse(item);
// compare the expiry time of the item with the current time
if (item.expiry && Date.now() > item.expiry) {
// If the item is expired, delete the item from storage and return null
localStorage.removeItem(key);
return null;
}
return item.value;
}