私はhtml5のsessionStorage
にデータを保存しなければならないフォームを構築しています。sessionStorage
がどこで期限切れになるかわかりません。 sessionStorage
の有効期限について教えてもらえますか
ブラウザセッションで存続および終了し、タブ間で共有されません。自動的に期限切れになることはありません。したがって、ブラウザを一度も閉じなければ、期限が切れることはありません。
そのため、タブ/ウィンドウが閉じられると、データは失われます。
各sessionstorageエリアには、5MBのストレージが許可されています(一部のブラウザーでは10MB)。 cookiesは4kb(または一部のブラウザではそれ以上)のみを許可します。ただし、Cookieには有効期限が設定されています。
Christophe がコメントに書いたように、localstorageは期限切れになりません。また、タブ間で共有され、sessionstorage(5mb)と同じサイズです。
私はこの質問がかなり古いことを知っていますが、他の誰かがこれにつまずいて助けになると思うなら、私は答えを投稿します。次のようなもので、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
を使用して、必要に応じて操作する必要があります。
誰かがこれが役立つことを願っています。
次のようなものを使用して、何らかの種類の有効期限メカニズムを追加できます。
// 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))
}
Cookieに有効期限を保存できます。ロードするすべてのページでCookieを読み取り、空の場合(有効期限が切れていることを意味する)、セッションストレージをクリアします。