2016-12-05 41 views
0

我今天遇到了一个问题,我试图确保用户已通过身份验证的令牌。我使用会话存储来设置会话过期和服务器端cookie,无法通过javascript访问它们以存储其身份验证令牌。目前的问题是,如果用户打开一个新选项卡,他将不会登录,因为sessionStorage中没有过期,但令牌cookie仍然存在。我正在考虑将sessionStorage的这种失效时间移至localStorage,以便用户在打开新选项卡时仍然登录,但是如果我的网站没有活动选项卡,我想删除此类localStorage条目。这可能检查吗?如果没有对同一网址的活动标签打开,销毁localStorage

+0

为什么不使用服务器会话?他们很容易解决这个问题。直到他们关闭了每个窗口他们的会话是有效的 – Viney

回答

1

您可以将到期日期设置为当前时间+ x(当x是短时间时,比如说一分钟)。 然后编写一个setInterval调用以在您的选项卡处于活动状态时对其进行扩展。例如:

var expiration = new Date(); 
expiration.setMinutes(expiration.getMinutes() + 1); 
window.localStorage.setItem('MyTokenExpiration', JSON.stringify(expiration)); 

window.setInterval(function() { 
    var now = new Date(); 
    var tokenExpiration = new Date(JSON.parse(window.localStorage.getItem('MyTokenExpiration'))); 
    if(tokenExpiration.getSeconds() < now.getSeconds() + 30) { 
     tokenExpiration.setMinutes(now.getMinutes() + 1); 
     window.localStorage.setItem('MyTokenExpiration', JSON.stringify(tokenExpiration)); 
    } 
}, 30000); 
相关问题