【问题标题】:Destroy localStorage if no active tabs for same url are open如果没有打开相同 url 的活动选项卡,则销毁 localStorage
【发布时间】:2017-04-19 14:31:40
【问题描述】:

我今天遇到了一个问题,我试图保护用户经过身份验证的令牌。我使用会话存储来设置会话到期,并使用 javascript 无法访问的服务器端 cookie 来存储其身份验证令牌。目前的问题是,如果用户打开一个新选项卡,他将不会登录,因为 sessionStorage 中没有过期,但是令牌 cookie 仍然存在。我正在考虑将此类过期从 sessionStorage 移至 localStorage,以便用户在打开新选项卡时仍处于登录状态,但如果我的网站没有活动选项卡,我想删除此类 localStorage 条目。这个可以查吗?

【问题讨论】:

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

标签: javascript cookies local-storage session-storage


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多