62

HTML5 にデータを保存する必要があるフォームを作成していますが、いつ期限切れsessionStorageになるかわかりません。sessionStorageの有効期限について誰か教えてくださいsessionStorage

4

4 に答える 4

88

ブラウザー セッションと共に生きては消え、タブ間で共有されることはありません。自動的に期限切れになりません。そのため、ブラウザーを閉じなければ、有効期限が切れることはありません。

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

セッションストレージ領域には、5MB のストレージが許可されます (一部のブラウザーでは 10MB)。一方、 Cookieは 4kb (一部のブラウザーではそれ以上) しか許可しません。ただし、Cookie には有効期限が設定されています。

Christopheがコメントに書いたように、localstorage期限切れになりません。また、タブ間で共有され、セッション ストレージ (5 MB) と同じサイズです。

于 2013-03-02T06:56:48.633 に答える
30

この質問はかなり古いことは知っていますが、他の誰かがこれに出くわして役に立ったと思ったら、私の回答を投稿します。次のようなもので、ほぼシミュレート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および操作する必要があります。

誰かがこれを参考にしてくれることを願っています。

于 2017-01-03T12:16:30.990 に答える
17

次のようなもので、ある種の有効期限メカニズムを追加できます。

// 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))
}
于 2018-01-10T10:02:30.950 に答える
1

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

于 2018-11-02T10:26:06.740 に答える