Expiration de 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 parler de l'heure d'expiration du sessionStorage

27
demandé sur Bhushan 2013-03-02 10:52:05

3 réponses

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

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

Chaque zone sessionstorage est autorisée à 5 Mo de stockage (dans certains navigateurs 10 Mo). Où as les cookies n'autorisent que 4 Ko (ou plus dans certains navigateurs). Les Cookies ont cependant une date d'expiration définie.

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

40
répondu Peter Rasmussen 2017-05-23 12:26:32

Je sais que cette question est assez ancienne mais je posterai ma réponse si quelqu'un d'autre tombe sur cela et le trouve utile. Vous pouvez à peu près simuler sessionStorage ou locaStorage expiration 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 le sessionStorage, ou localStorage d'ailleurs, est expiré:

$(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 voulez pas que les utilisateurs restent connectés après la fermeture de l'onglet ou du navigateur, Utilisez sessionStorage, sinon vous devez utiliser localStorage et le manipuler comme vous le souhaitez.

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

13
répondu Culda-Daisa Andrei 2017-01-03 12:16:30

, 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))
}
3
répondu Marc Bouvier 2018-01-10 10:02:30