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?Ich würde vorschlagen, den Zeitstempel in der Objekt die Sie im localStorage speichern
var object = {value: "value", timestamp: new Date().getTime()}
localStorage.setItem("key", JSON.stringify(object));
Sie können das Objekt analysieren, den Zeitstempel abrufen und mit dem aktuellen Datum vergleichen und gegebenenfalls den Wert des Objekts aktualisieren.
var object = JSON.parse(localStorage.getItem("key")),
dateString = object.timestamp,
now = new Date().getTime().toString();
compareTime(dateString, now); //to implement
Alternativ dazu können Sie einen leichtgewichtigen Wrapper verwenden wie localstorage-slim.js die dies für Sie übernimmt.
Es ist nicht möglich, das Verfallsdatum anzugeben. Das ist ganz dem Benutzer überlassen.
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 aufheben, oder der Browser kann auf Platzprobleme stoßen. Es ist gut, defensiv zu programmieren. Im Allgemeinen bleiben die Dinge jedoch "für immer", wenn man eine praktische Definition dieses Wortes zugrunde legt.
bearbeiten - Natürlich kann Ihre eigene Anwendung aktiv Daten entfernen, wenn sie entscheidet, dass sie zu alt sind. Das heißt, Sie können explizit eine Art Zeitstempel in das, was Sie gespeichert haben, einfügen und diesen dann später verwenden, um zu entscheiden, ob die Informationen gelöscht werden sollen oder nicht.
Sie können verwenden lscache . Das Programm erledigt dies automatisch für Sie, auch wenn die Speichergröße das Limit überschreitet. In diesem Fall beginnt das Programm mit der Beschneidung der Objekte, die dem angegebenen Ablaufdatum am nächsten sind.
Von der readme
:
lscache.set
Stores the value in localStorage. Expires after specified number of minutes.
Arguments
key (string)
value (Object|string)
time (number: optional)
Dies ist der einzige wirkliche Unterschied zwischen den regulären Speichermethoden. Hole, entferne, etc. funktionieren gleich.
Wenn Sie nicht so viele Funktionen benötigen, können Sie einfach einen Zeitstempel mit dem Wert speichern (über JSON) und ihn auf Ablauf überprüfen.
Es gibt allerdings einen guten Grund, warum die lokale Speicherung dem Benutzer überlassen bleibt. Aber Dinge wie lscache sind sehr nützlich, wenn Sie extrem temporäre Daten speichern müssen.
Brynner Ferreira hat einen guten Vorschlag gemacht: die Speicherung eines Geschwisterschlüssels, in dem die Ablaufdaten gespeichert sind. Auf diese Weise, wenn Sie eine große Anzahl von Schlüsseln haben, oder wenn Ihre Werte große Json-Objekte sind brauchen Sie sie nicht zu analysieren, um auf den Zeitstempel zuzugreifen.
Hier folgt eine verbesserte Version:
/* removeStorage: removes a key from localStorage and its sibling expiracy key
params:
key <string> : localStorage key to remove
returns:
<boolean> : telling if operation succeeded
*/
function removeStorage(name) {
try {
localStorage.removeItem(name);
localStorage.removeItem(name + '_expiresIn');
} catch(e) {
console.log('removeStorage: Error removing key ['+ key + '] from localStorage: ' + JSON.stringify(e) );
return false;
}
return true;
}
/* getStorage: retrieves a key from localStorage previously set with setStorage().
params:
key <string> : localStorage key
returns:
<string> : value of localStorage key
null : in case of expired key or failure
*/
function getStorage(key) {
var now = Date.now(); //epoch time, lets deal only with integer
// set expiration for storage
var expiresIn = localStorage.getItem(key+'_expiresIn');
if (expiresIn===undefined || expiresIn===null) { expiresIn = 0; }
if (expiresIn < now) {// Expired
removeStorage(key);
return null;
} else {
try {
var value = localStorage.getItem(key);
return value;
} catch(e) {
console.log('getStorage: Error reading key ['+ key + '] from localStorage: ' + JSON.stringify(e) );
return null;
}
}
}
/* setStorage: writes a key into localStorage setting a expire time
params:
key <string> : localStorage key
value <string> : localStorage value
expires <number> : number of seconds from now to expire the key
returns:
<boolean> : telling if operation succeeded
*/
function setStorage(key, value, expires) {
if (expires===undefined || expires===null) {
expires = (24*60*60); // default: seconds for 1 day
} else {
expires = Math.abs(expires); //make sure it's positive
}
var now = Date.now(); //millisecs since epoch time, lets deal only with integer
var schedule = now + expires*1000;
try {
localStorage.setItem(key, value);
localStorage.setItem(key + '_expiresIn', schedule);
} catch(e) {
console.log('setStorage: Error setting key ['+ key + '] in localStorage: ' + JSON.stringify(e) );
return false;
}
return true;
}
Hier wird dringend empfohlen sessionStorage
- es ist dasselbe wie localStorage aber zerstören, wenn Sitzung zerstört / Browser geschlossen
- también localStorage zwischen Tabs teilen können, während sessionStorage kann nur in der aktuellen Registerkarte verwendet werden, aber der Wert ändert sich nicht beim Aktualisieren der Seite oder beim Ändern der Seite
- sessionStorage ist auch nützlich, um den Netzwerkverkehr gegen Cookie
für Sollwert verwenden
sessionStorage.setItem("key","my value");
für get value verwenden
var value = sessionStorage.getItem("key");
Klicken Sie hier für die Api-Ansicht
alle Wege für den Satz sind
sessionStorage.key = "my val";
sessionStorage["key"] = "my val";
sessionStorage.setItem("key","my value");
alle Wege für get sind
var value = sessionStorage.key;
var value = sessionStorage["key"];
var value = sessionStorage.getItem("key");
- See previous answers
- Weitere Antworten anzeigen