388 votes

Quand les éléments du stockage local HTML5 expirent-ils?

Combien de jours de données, stockés dans localStorage (dans le cadre de Dom Storage HTML 5) disponibles? Puis-je définir l'heure d'expiration des données qui, je met à localStorage?

295voto

sebarmeli Points 11831

Je dirais pour stocker timestamp dans l' objet que vous stockez dans le localStorage

Vous pouvez analyser l’objet, obtenir le timestamp et comparer avec la Date actuelle et si nécessaire, mettre à jour la valeur de l’objet.

259voto

Pointy Points 172438

Selon John Resig, il n’est pas possible de spécifier l’expiration. C’est complètement à l’utilisateur.

http://ejohn.org/blog/DOM-Storage/

Edit : de toute évidence, votre propre application peut supprimer activement trucs si il décide qu’il est trop vieux. Autrement dit, vous pouvez inclure explicitement une sorte d’estampille dans ce que vous avez obtenu enregistré et ensuite l’utiliser plus tard pour décider si oui ou non l’information doit être rincée.

39voto

huyz Points 979

Vous pouvez utiliser lscache. Il gère automatiquement pour vous, y compris les cas où la taille de stockage est supérieur à la limite. Si cela arrive, il commence l'élagage des éléments qui sont le plus proche de sa date d'expiration.

De la readme:

lscache.set

Stores the value in localStorage. Expires after specified number of minutes.

Arguments
key (string)
value (Object|string)
time (number: optional)

C'est la seule vraie différence entre le régulier méthodes de stockage. Obtenir, supprimer, etc fonctionnent de la même.

Si vous n'avez pas besoin de beaucoup plus de fonctionnalités, vous pouvez facilement stocker un horodatage avec la valeur (via JSON) et vérifier sa date de péremption.

À noter, il y a une bonne raison pourquoi le stockage local est laissé à l'utilisateur. Mais, des choses comme lscache faire venir dans maniable quand vous avez besoin de stocker extrêmement temporaire de données.

27voto

Robert Peake Points 31

Tandis que le stockage local ne fournit pas un mécanisme d'expiration, cookies. Simplement en appariement d'un local de stockage de clés avec un cookie fournit un moyen facile de s'assurer que le stockage local peut être mis à jour avec la même date d'expiration des paramètres de la forme d'un cookie.

Exemple en 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

Cet exemple définit un cookie avec le paramètre par défaut de manière à expirer lorsque le navigateur est fermé. Ainsi, lorsque le navigateur est fermé et ré-ouvert, le magasin de données local pour your_data sera mise à jour par un appel côté serveur.

Notez que ce n'est pas exactement la même que la suppression de la banque de données locale, c'est plutôt la mise à jour de la banque de données locale à chaque fois que le cookie expire. Toutefois, si votre objectif principal est de pouvoir stocker plus de 4K côté client (la limitation de biscuit de la taille), cette association de cookie et de locaux de stockage va vous aider à accomplir une plus grande taille de stockage à l'aide de la même date d'expiration des paramètres de la forme d'un cookie.

10voto

Brynner Ferreira Points 318
// 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); }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X