Я создаю форму, в которой я должен хранить данные в html5 sessionStorage
Я не знаю, где истекает sessionStorage
. Может ли кто-нибудь рассказать мне об истечении срока действия sessionStorage
Истечение срока хранения
Ответ 1
Он живет и умирает с вашим сеансом браузера и не делится между вкладками. Он не истекает автоматически. Поэтому, если вы никогда не закрываете свой браузер, он никогда не истекает.
Итак, когда вкладка/окно закрывается, данные теряются.
Каждой области sessionstorage разрешено хранить 5 МБ памяти (в некоторых браузерах 10 МБ). Где cookie разрешает только 4kb (или больше в некоторых браузерах). Однако Cookies имеют дату истечения срока действия.
Как Christophe написал в комментариях, localstorage никогда не истекает. Он также делится между вкладками и имеет тот же размер, что и sessionstorage (5mb).
Ответ 2
Я знаю, что этот вопрос довольно старый, но я отправлю свой ответ, если кто-то еще наткнется на него и найдет его полезным. Вы можете в значительной степени имитировать sessionStorage
или locaStorage
истечение чего-то вроде этого:
//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));
Вы также можете зашифровать этот объект, используя http://bitwiseshiftleft.github.io/sjcl/, если вы не хотите, чтобы этот объект сеанса был явным.
На каждой загрузке страницы вы можете проверить, не истечет ли sessionStorage
или localStorage
:
$(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');
}
});
Если вы не хотите, чтобы пользователи были сохранены после входа в систему после закрытия вкладки или браузера, используйте sessionStorage
, в противном случае вы должны использовать localStorage
и управлять им по своему усмотрению.
Я надеюсь, что кто-то найдет это полезным.
Ответ 3
Вы можете добавить какой-то механизм истечения с чем-то вроде этого:
// 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))
}