Impostare una scadenza in localStorage

Mattepuffo's logo
Impostare una scadenza in localStorage

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!


Condividi

Commentami!