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?
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).
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.
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))
}
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.