438 Stimmen

Wann laufen Objekte im lokalen HTML5-Speicher ab?

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?

329voto

sebarmeli Punkte 17559

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.

274voto

Pointy Punkte 387467

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.

43voto

huyz Punkte 2226

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.

43voto

Fernando Fabreti Punkte 4027

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;
}

33voto

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");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X