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
?
Ablauf der SessionStorage
Jitesh Tukadiya
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 sessionStorage
oder 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 sessionStorage
andernfalls 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.