如何在会话存储中设置令牌一小时?

时间:2019-08-13 06:55:02

标签: javascript session-storage

这里有token个令牌,我存储了sessionStorage(请参见下面的代码)。 现在,我想在60分钟后自动在sessionstorage中将该令牌设置为60分钟,我想使该令牌过期,这怎么可能呢?

let value = 'eyJpc3MiOiJodHRwczovL2FwaS5kYXRhdmlwZXIuaW8vYXBpL2xvZ2l
             uIiwiaWF0IjoxNTY1Njc4NjczLCJleHAiOjE1NjU2OD';

sessionStorage.setItem('token', value);

2 个答案:

答案 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));
}

希望获得帮助!