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?

28voto

Robert Peake Punkte 381

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.

17voto

jldupont Punkte 87330

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.

12voto

FatherStorm Punkte 7075

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.

11voto

Brynner Ferreira Punkte 1487
// 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); }

}

10voto

iProDev Punkte 417

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

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