当会话结束时,您如何处理注销多个选项卡的用户?

时间:2011-12-28 23:25:47

标签: javascript session

我们希望在会话结束时将用户注销,因此一种方法是让JavaScript在会话时间段过后将用户重定向到注销脚本。但是,如果用户打开了多个选项卡,则可以在不可见的选项卡上激活JavaScript并将用户注销。我们不能进行AJAX调用,因为这会重置会话时间长度。在会话结束时,处理注销多个标签的用户的好方法是什么?

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

4 个答案:

答案 0 :(得分:2)

使会话cookie过期。 Cookie可以设置为在浏览器关闭时或在一段时间后过期。见http://en.wikipedia.org/wiki/HTTP_cookie#Expires_and_Max-Age

答案 1 :(得分:1)

为什么你依赖javascript?将他登录到服务器上然后打开标签并不重要。

答案 2 :(得分:1)

如果用户已登录,则必须轮询服务器。您可以根据AJAX或WebSockets执行此操作。如果cookie过期,也许您可​​以自动重定向但我不确切知道您是否可以检查每个JavaScript的到期日期。

答案 3 :(得分:0)

我有一个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);
});

在注销时,我在提交表单之前删除了loginStorage

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

因此,当窗口检测到登录存储已更改从而重新加载页面时,服务器会指示注销并重定向到登录页面。