Подтвердить что ты не робот

Истечение срока хранения

Я создаю форму, в которой я должен хранить данные в html5 sessionStorage Я не знаю, где истекает sessionStorage. Может ли кто-нибудь рассказать мне об истечении срока действия sessionStorage

4b9b3361

Ответ 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))
}