web-dev-qa-db-ja.com

sessionStorageの有効期限

私はhtml5のsessionStorageにデータを保存しなければならないフォームを構築しています。sessionStorageがどこで期限切れになるかわかりません。 sessionStorageの有効期限について教えてもらえますか

40
Jitesh Tukadiya

ブラウザセッションで存続および終了し、タブ間で共有されません。自動的に期限切れになることはありません。したがって、ブラウザを一度も閉じなければ、期限が切れることはありません。

そのため、タブ/ウィンドウが閉じられると、データは失われます。

sessionstorageエリアには、5MBのストレージが許可されています(一部のブラウザーでは10MB)。 cookiesは4kb(または一部のブラウザではそれ以上)のみを許可します。ただし、Cookieには有効期限が設定されています。

Christophe がコメントに書いたように、localstorageは期限切れになりません。また、タブ間で共有され、sessionstorage(5mb)と同じサイズです。

58
Peter Rasmussen

私はこの質問がかなり古いことを知っていますが、他の誰かがこれにつまずいて助けになると思うなら、私は答えを投稿します。次のようなもので、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を使用して、必要に応じて操作する必要があります。

誰かがこれが役立つことを願っています。

16

次のようなものを使用して、何らかの種類の有効期限メカニズムを追加できます。

// 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))
}
5
Marc Bouvier

Cookieに有効期限を保存できます。ロードするすべてのページでCookieを読み取り、空の場合(有効期限が切れていることを意味する)、セッションストレージをクリアします。

0
danan