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

Javascript 如何在会话存储中设置一小时的令牌?,javascript,session-storage,Javascript,Session Storage,这里我有令牌我存储了这个令牌会话存储(参见下面的代码)。 现在我想在sessionstorage中将此令牌设置为60分钟,60分钟后自动存储我想使此令牌过期,这怎么可能 let value = 'eyJpc3MiOiJodHRwczovL2FwaS5kYXRhdmlwZXIuaW8vYXBpL2xvZ2l uIiwiaWF0IjoxNTY1Njc4NjczLCJleHAiOjE1NjU2OD'; sessionStorage.setItem('token', valu

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

let value = 'eyJpc3MiOiJodHRwczovL2FwaS5kYXRhdmlwZXIuaW8vYXBpL2xvZ2l
             uIiwiaWF0IjoxNTY1Njc4NjczLCJleHAiOjE1NjU2OD';

sessionStorage.setItem('token', value);

按设计,会话存储预计不会在会话之间持久化

会话存储类似于本地存储;唯一的区别是 虽然localStorage中存储的数据没有过期时间,但是 当页面会话结束时,in sessionStorage将被清除。一页 只要浏览器处于打开状态,会话将持续一段时间,并在浏览器结束后继续 页面重新加载和恢复

如果仍希望会话存储中的任何存储值在会话过期之前过期,则需要将过期时间保存在值中,并通过自己的函数检查是否过期

以下是一个简化的示例:

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');
}

这个例子可以很好地演示该方法。如果您希望根据存储的值做出关键决策,则必须采取安全预防措施

根据设计,会话存储预计不会在会话之间持久存在

会话存储类似于本地存储;唯一的区别是 虽然localStorage中存储的数据没有过期时间,但是 当页面会话结束时,in sessionStorage将被清除。一页 只要浏览器处于打开状态,会话将持续一段时间,并在浏览器结束后继续 页面重新加载和恢复

如果仍希望会话存储中的任何存储值在会话过期之前过期,则需要将过期时间保存在值中,并通过自己的函数检查是否过期

以下是一个简化的示例:

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');
}

这个例子可以很好地演示该方法。如果您希望根据存储的值做出关键决策,则必须采取安全预防措施

手动,您可以执行以下操作:

// 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));
}

希望这有帮助

手动,您可以执行以下操作:

// 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));
}

希望这有帮助

不,sessionStorage旨在为当前会话保留值,它不允许像Cookie那样出现任何过期,如果您想处理它,您需要手动执行。@briosheje如何手动管理如果涉及身份验证或其他内容,它可能不是一个安全的解决方案,因为会话存储很容易更改,但是您可以定义一个函数,该函数在会话存储中存储令牌以及过期日期和时间。然后,根据您的需要,您可以通过另一个函数检查事件:1)是否有令牌。2) 是否过期。如果已过期,请同时删除两个。@briosheje您能用示例或答案进行解释以便于理解会话存储是否仍然容易受到跨站点脚本攻击?不建议存储敏感信息,如身份验证令牌和API密钥。不,sessionStorage旨在保留当前会话的值,它不允许像Cookie一样过期,如果您想处理它,您需要手动执行该操作。@Brioshej手动管理的方式如果涉及身份验证或其他内容,它可能不是一个安全的解决方案,因为会话存储很容易更改,但您可以定义一个函数,在会话存储中存储令牌以及到期日期和时间。然后,根据您的需要,您可以通过另一个函数检查事件:1)是否有令牌。2) 是否过期。如果已过期,请同时删除两个。@briosheje您能用示例或答案进行解释以便于理解会话存储是否仍然容易受到跨站点脚本攻击?不建议存储敏感信息,如身份验证令牌和API密钥。