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?
Réponses
Trop de publicités?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.
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.
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.
// 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); }
}