Ablauf der SessionStorage

Lesezeit: 4 Minuten

Benutzer-Avatar
Jitesh Tukadiya

Ich baue ein Formular, in dem ich die Daten in HTML5 speichern muss sessionStorage Ich weiß nicht, wann die sessionStorage läuft ab. Kann mir jemand was zur Ablaufzeit sagen sessionStorage?

Benutzer-Avatar
Peter Rasmussen

Es lebt und stirbt mit Ihrer Browsersitzung und wird nicht zwischen Tabs geteilt. Es läuft nicht automatisch ab. Wenn Sie also Ihren Browser nie schließen, läuft er nie ab.

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

Jeder Sitzungsspeicher Bereich ist 5 MB Speicherplatz erlaubt (in einigen Browsern 10 MB). Wohingegen Kekse erlauben Sie nur 4kb (oder mehr in einigen Browsern). Cookies haben jedoch ein festgelegtes Ablaufdatum.

Wie Christophe in den Kommentaren schrieb, lokaler Speicher läuft nie ab. Es wird auch über Registerkarten hinweg geteilt und hat die gleiche Größe wie Sitzungsspeicher (5 MB).

  • Beachten Sie, dass localStorage im Gegensatz zu sessionStorage nicht abläuft, wenn Sie den Browser schließen.

    – Christoph

    2. März 2013 um 7:22 Uhr


  • sessionStorage läuft tatsächlich nicht ab, wenn Sie den Browser schließen, es kann sich über Browsersitzungen erstrecken. Wenn Sie den Browser schließen und die Registerkarte speichern oder der Browser abstürzt und Sie die Registerkarten wiederherstellen, wenn Sie ihn neu starten, es zählt als dieselbe Sitzung Beachte die Linie Die Lebensdauer eines Browsing-Kontexts kann unabhängig von der Lebensdauer des eigentlichen Benutzeragentenprozesses selbst sein, da der Benutzeragent möglicherweise die Wiederaufnahme von Sitzungen nach einem Neustart unterstützt.

    – Nutzloser Code

    2. März 2013 um 11:37 Uhr

  • sessionStorage wird auch überleben ein reload wenn Sie die Seite aktualisieren.

    – Nutzloser Code

    2. März 2013 um 11:45 Uhr

  • Können wir die Zeit einstellen, nach der ein sessionStorage einen bestimmten Schlüssel entfernt?

    – Vijay Shanker

    15. April 2014 um 7:03 Uhr

  • Es sollte tabStorage oder windowStorage oder so heißen. Sitzung ist so ein vager Begriff.

    – Jake Wilson

    6. Januar 2016 um 21:39 Uhr

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

//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 etwas wie verwenden http://bitwiseshiftleft.github.io/sjcl/ wenn Sie nicht möchten, dass dieses Sitzungsobjekt im Klartext ist.

Bei jedem Seitenaufruf können Sie überprüfen, ob die sessionStorageoder localStorage ist übrigens abgelaufen:

$(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 angemeldet bleiben, verwenden Sie sessionStorageandernfalls sollten Sie verwenden localStorage und bearbeiten Sie es nach Ihren Wünschen.

Ich hoffe, jemand wird dies hilfreich finden.

  • Das hört sich für mich nach einer Login-Schwachstelle an. Wenn jemand Entwicklertools öffnet und das Datum ändert, hat er Zugriff.

    – Ali Avci

    31. Oktober 2019 um 11:24 Uhr

  • Eine solche Person greift auf clientseitigen Code zu, ja, das ist sicher für jemanden zum Basteln, dennoch wird die API einen 401 werfen, vorausgesetzt, die Person hat kein gültiges Token

    – Barungi Stephen

    24. Mai 2021 um 12:55 Uhr

Sie können eine Art Ablaufmechanismus wie folgt 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))
}

Sie können die Ablaufzeit im Cookie speichern. Lesen Sie bei jedem Laden der Seite das Cookie, wenn es leer ist (bedeutet abgelaufen), dann löschen Sie den Sitzungsspeicher.

1297580cookie-checkAblauf der SessionStorage

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy