这里有token
个令牌,我存储了sessionStorage
(请参见下面的代码)。
现在,我想在60分钟后自动在sessionstorage中将该令牌设置为60分钟,我想使该令牌过期,这怎么可能呢?
let value = 'eyJpc3MiOiJodHRwczovL2FwaS5kYXRhdmlwZXIuaW8vYXBpL2xvZ2l
uIiwiaWF0IjoxNTY1Njc4NjczLCJleHAiOjE1NjU2OD';
sessionStorage.setItem('token', value);
答案 0 :(得分:1)
根据设计,会话存储不应在所有会话之间持久存在。
sessionStorage与localStorage类似;唯一的区别是 虽然存储在localStorage中的数据没有到期时间,但是存储的数据 页面会话结束时,sessionStorage中的in会被清除。页面 会话持续的时间只要打开浏览器并在 页面重新加载和还原。
如果您仍然希望会话存储区中的任何存储值在会话过期之前都过期,则需要将过期时间保存在该值中,并通过自己的函数检查是否过期。
这是一个简化的示例:
sessionStorage.setItem('key', JSON.stringify({exp: new Date() + 5, data: data})); //A value meant to expire in 5 minutes
function checkExpired() {
var exp = sessionStorage.getITem('exp');
if (exp > new Date())
console.log('expired');
}
这个例子也很好地演示了该方法。如果要基于存储的值做出关键决策,则必须采取安全预防措施。
答案 1 :(得分:1)
您可以手动执行以下操作:
// Get from the session and validate for each reload or any event.
function validateSession() {
let seassionVal = sessionStorage.getItem('seassionObj');
if (seassionVal !== null) {
let sessionObj = JSON.parse(seassionVal);
let expiredAt = new Date(value.expiredAt);
if (expiredAt > new Date()) { // Validate expiry date.
return sessionObj.value;
} else {
sessionStorage.removeItem(key);
}
}
return null;
}
// Set session function
function setToSession(value, inMin) {
let expiredAt = new Date(new Date().getTime() + (60000 * inMin));
let obj = {
value: value,
expiredAt: expiredAt.toISOString()
}
sessionStorage.setItem('seassionObj', JSON.stringify(obj));
}
希望获得帮助!