Javascript 当会话结束时,当用户打开多个选项卡时,如何处理注销用户的问题?

Javascript 当会话结束时,当用户打开多个选项卡时,如何处理注销用户的问题?,javascript,session,Javascript,Session,我们希望在会话结束时注销用户,因此一种方法是让JavaScript在会话结束后将用户重定向到注销脚本。但是,如果用户打开了多个选项卡,JavaScript可以在不可见的选项卡上激活并注销用户。我们无法执行AJAX调用,因为这会重置会话时间长度。当会话结束时,当用户打开多个选项卡时,如何处理注销用户的问题 编辑:会话在一段时间后在服务器上过期。JavaScript只是将用户重定向到注销页面,这样内容就不会留在屏幕上。使会话cookie过期。Cookie可以设置为在浏览器关闭时或某段时间后过期。请参

我们希望在会话结束时注销用户,因此一种方法是让JavaScript在会话结束后将用户重定向到注销脚本。但是,如果用户打开了多个选项卡,JavaScript可以在不可见的选项卡上激活并注销用户。我们无法执行AJAX调用,因为这会重置会话时间长度。当会话结束时,当用户打开多个选项卡时,如何处理注销用户的问题


编辑:会话在一段时间后在服务器上过期。JavaScript只是将用户重定向到注销页面,这样内容就不会留在屏幕上。

使会话cookie过期。Cookie可以设置为在浏览器关闭时或某段时间后过期。请参见

为什么要依赖javascript来实现这一点?将他从服务器上注销,然后打开选项卡无关紧要。

如果用户已登录,则必须轮询服务器。您可以通过AJAX或WebSockets实现。如果cookie过期,也许您可以自动重定向,但我不知道您是否可以根据JavaScript检查过期日期。

我有一个MVC应用程序,成功登录后,我在我的Layout.cshtml中设置了登录存储值

$(document).ready(function () {
    function loginStorageChange(event) {
        if(window.localStorage.getItem('loginStorage') === null) {
            setTimeout(function() { location.reload(); }, 1000);
        }
    }

    window.localStorage.setItem('loginStorage', true);
    window.addEventListener('storage', loginStorageChange, false);
});
在注销时单击,我将在表单提交之前删除登录存储

function logoutSubmit() {
    window.localStorage.removeItem('loginStorage');
    $('#logoutForm').submit();
}

所以,当窗口检测到loginstorage已更改,以便重新加载页面时,服务器将指示注销并重定向到登录页面。

我刚刚编辑了这个问题。我们之所以使用javascript,是因为我们希望用户重定向到登录页面。这正是我所需要的。谢谢