wake-up-neo.net

Ablauf von sessionStorage

Ich baue ein Formular, in dem ich die Daten in HTML5 speichern muss sessionStorage Ich weiß nicht, wo die sessionStorage abläuft. Kann mir jemand etwas über die Ablaufzeit der sessionStorage erzählen?

33
Jitesh Tukadiya

Es lebt und stirbt mit Ihrer Browsersitzung und wird nicht zwischen Registerkarten geteilt. Es läuft nicht automatisch ab. Wenn Sie also niemals Ihren Browser schließen, verfällt dieser nie.

Wenn also das Tab/Fenster geschlossen wird, gehen die Daten verloren.

Für jeden sessionstorage -Bereich sind 5 MB Speicherplatz zulässig (in einigen Browsern 10 MB). Where as cookies erlaubt nur 4 KB (oder mehr in einigen Browsern). Cookies haben jedoch ein festgelegtes Ablaufdatum.

Wie Christophe in den Kommentaren schrieb, verfällt localstorage niemals. Es wird auch auf Registerkarten gemeinsam genutzt und hat dieselbe Größe wie sessionstorage (5mb).

46
Peter Rasmussen

Ich weiß, dass diese Frage ziemlich alt ist, aber ich werde meine Antwort posten, wenn jemand anderes darüber stolpert und es hilfreich findet. Sie können sessionStorage oder locaStorage Ablauf mit so etwas simulieren:

//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));

Sie können dieses Objekt auch verschlüsseln, indem Sie Folgendes verwenden: http://bitwiseshiftleft.github.io/sjcl/ , wenn Sie nicht möchten, dass dieses Sitzungsobjekt frei ist.

Bei jedem Laden der Seite können Sie überprüfen, ob die Variable sessionStorage oder localStorage abgelaufen ist:

$(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');
    }
});

Wenn Sie nicht möchten, dass Benutzer nach dem Schließen der Registerkarte oder des Browsers als angemeldet bleiben, verwenden Sie sessionStorage. Andernfalls sollten Sie localStorage verwenden und nach Belieben bearbeiten.

Ich hoffe, jemand findet das hilfreich.

14

Sie können einen Ablaufmechanismus mit etwas wie dem folgenden hinzufügen:

// 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

Sie können die Ablaufzeit in einem Cookie speichern. Lesen Sie in jeder geladenen Seite das Cookie. Wenn es leer ist (bedeutet, dass es abgelaufen ist), löschen Sie den Sitzungsspeicher. 

0
danan