HTML5 にデータを保存する必要があるフォームを作成していますが、いつ期限切れsessionStorage
になるかわかりません。sessionStorage
の有効期限について誰か教えてくださいsessionStorage
。
4 に答える
ブラウザー セッションと共に生きては消え、タブ間で共有されることはありません。自動的に期限切れになりません。そのため、ブラウザーを閉じなければ、有効期限が切れることはありません。
そのため、タブ/ウィンドウを閉じると、データは失われます。
各セッションストレージ領域には、5MB のストレージが許可されます (一部のブラウザーでは 10MB)。一方、 Cookieは 4kb (一部のブラウザーではそれ以上) しか許可しません。ただし、Cookie には有効期限が設定されています。
Christopheがコメントに書いたように、localstorageは期限切れになりません。また、タブ間で共有され、セッション ストレージ (5 MB) と同じサイズです。
この質問はかなり古いことは知っていますが、他の誰かがこれに出くわして役に立ったと思ったら、私の回答を投稿します。次のようなもので、ほぼシミュレート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 を読み取り、空の場合 (有効期限が切れていることを意味します)、セッションストレージをクリアします。