Impostare una scadenza in localStorage
L'oggetto localStorage di Javascript è veramente ottimo, flessibile e funzionale.
Solo che di default non ha una scadenza; in tal caso dovreste usare sessionStorage, che però scade alla chiusura della sessione.
Quello che vogliamo ottenere è un localStorage che scade quando vogliamo noi.
Ed è possibile farlo, in quanto possiamo passargli un JSON con dentro la scadenza e poi controllarla.
Più facile a farsi che a dirsi; cominciamo con la funzione per settare l'oggetto:
function setLocalScadenza(key, val, ttl) {
const oldItem = localStorage.getItem(key);
if (!oldItem) {
const now = new Date();
const item = {
value: val,
expiry: now.getTime() + ttl,
}
localStorage.setItem(key, JSON.stringify(item));
}
}
In pratica controlliamo se già esiste l'oggetto, ed in caso lo creiamo; se non facciamo il controllo (che non è obbligatorio) il ttl verrà rinnovato.
Questo dipende da come volete gestire voi la scadenza; potete anche aggiungere un eventuale parametro alla funzione.
Poi per prendere il valore:
function getLocalScadenza(key) {
const item = localStorage.getItem(key);
if (!item) {
return null
}
const jsonItem = JSON.parse(item);
const now = new Date();
if (now.getTime() > jsonItem.expiry) {
localStorage.removeItem(key);
return null;
}
return jsonItem.value;
}
In pratica facciamo il parsing del JSON e andiamo a controllare la scadenza; in base al controllo ritorniamo null o il valore.
Per richiamare queste funzioni nella pagina:
window.onload = function () {
setLocalScadenza("TEST", "Stringa di test", 60000);
const mioItem = getLocalScadenza("TEST");
console.log(mioItem);
}
Io ho impostato un minuto per fare dei test.
Come dicevo prima, avete diverse politiche per gestire la scadenza, a seconda di quello che vi serve; ad esempio:
- mettete una scadenza corta, ma la rinnovate ad ogni refresh
- ne mettete una lunga senza rinnovo; ad un certo punto saranno costretti a ripetere una daterminata operazione (ad esempio il login)
- ecc
Enjoy!
javascript localstorage json
Commentami!