web-dev-qa-db-fra.com

Expiration de la sessionStorage

Je construis un formulaire dans lequel je dois stocker les données dans sessionStorage de html5. Je ne sais pas où le sessionStorage expire. Quelqu'un peut-il me dire l'heure d'expiration de la sessionStorage

33
Jitesh Tukadiya

Il vit et meurt avec votre session de navigateur et n'est pas partagé entre les onglets. Il n'expire pas automatiquement. Donc, si vous ne fermez jamais votre navigateur, il n'expire jamais.

Ainsi, lorsque l'onglet/la fenêtre est fermé, les données sont perdues.

Chaque espace de stockage sessionstorage dispose de 5 Mo de mémoire (dans certains navigateurs, 10 Mo). Where as cookies n'autorise que 4 Ko (ou plus dans certains navigateurs). Les cookies ont cependant une date d'expiration définie.

Comme Christophe a écrit dans les commentaires, localstorage n’expire jamais. Il est également partagé entre les onglets et a la même taille que sessionstorage (5mb).

46
Peter Rasmussen

Je sais que cette question est assez ancienne, mais je posterai ma réponse si quelqu'un d'autre tombe sur cette question et la trouve utile. Vous pouvez à peu près simuler l'expiration sessionStorage ou locaStorage avec quelque chose comme ceci:

//In your login logic or whatever
var expires = new Date(year, month, day, hours, minutes, seconds, milliseconds);
var sessionObject = {
    expiresAt: expires,
    someOtherSessionData: {
        username: ''
    }
}
sessionStorage.setItem('sessionObject', JSON.stringify(sessionObject));

Vous pouvez également chiffrer cet objet en utilisant quelque chose comme http://bitwiseshiftleft.github.io/sjcl/ si vous ne voulez pas que cet objet de session soit en clair.

À chaque chargement de page, vous pouvez vérifier si la sessionStorage, ou localStorage est expirée:

$(document).ready(function(){
    var currentDate = new Date();
    var sessionObject = JSON.parse(sessionStorage.getItem('sessionObject'));
    var expirationDate = sessionObject.expiresAt;
    if(Date.parse(currentDate) < Date.parse(expirationDate)) {
        //normal application behaviour => session is not expired
        var someAppVariable = sessionObject.someOtherSessionData.etc;
    } else {
        //redirect users to login page or whatever logic you have in your app 
        //and remove the sessionStorage because it will be set again by previous logic
        sessionStorage.removeItem('sessionObject');
        console.log('session expired');
    }
});

Si vous ne souhaitez pas que les utilisateurs soient maintenus connectés après la fermeture de l'onglet ou du navigateur, utilisez sessionStorage, sinon vous devez utiliser localStorage et le manipuler à votre guise.

J'espère que quelqu'un trouvera cela utile.

14
Culda-Daisa Andrei

Vous pouvez ajouter une sorte de mécanisme d'expiration avec quelque chose comme ceci:

// get from session (if the value expired it is destroyed)
function sessionGet(key) {
  let stringValue = window.sessionStorage.getItem(key)
    if (stringValue !== null) {
      let value = JSON.parse(stringValue)
        let expirationDate = new Date(value.expirationDate)
        if (expirationDate > new Date()) {
          return value.value
        } else {
          window.sessionStorage.removeItem(key)
        }
    }
    return null
}

// add into session
function sessionSet(key, value, expirationInMin = 10) {
  let expirationDate = new Date(new Date().getTime() + (60000 * expirationInMin))
    let newValue = {
    value: value,
    expirationDate: expirationDate.toISOString()
  }
  window.sessionStorage.setItem(key, JSON.stringify(newValue))
}
5
Marc Bouvier

Vous pouvez enregistrer l'heure d'expiration dans les cookies. Dans chaque chargement de page, lisez le cookie, s'il est vide (signifie expiré), effacez le stockage de session. 

0
danan