【问题标题】:User closes a tab (implies logout) of many tabs, these are not redirected to index用户关闭许多选项卡的选项卡(意味着注销),这些选项卡不会重定向到索引
【发布时间】:2013-01-10 20:31:35
【问题描述】:

我有以下问题

我使用过滤器使用户能够导航到授权页面,否则它会派生到索引。

很明显,但必须说,一个浏览器一个会话。 此外,当用户关闭浏览器或标签页时,他的会话过期。

当用户打开新选项卡并关闭其中一个选项卡时会出现问题,这意味着会话无效并且其他选项卡没有重定向到索引,因为它没有 ajax 事件。

我测试过的解决方案之一。

这是 servlet 中的代码,但没有解释它是如何实现的 已实施。

    public void trackUserTabs() {
    String onload = Controller.getParameter(ONLOAD_ID);
    if (onload != null && onload.trim().equals("true")) {
        openedTabs++;
        System.err.println("onload: " + controller.getCurrentPrinciple() + "..........." + openedTabs);
    }
    String onunload = Controller.getParameter(ONUNLOAD_ID);
    if (onunload != null && onunload.trim().equals("true")) {
        openedTabs--;
        System.err.println("onunload: " + controller.getCurrentPrinciple() + ".............." + openedTabs);
    }
    if (openedTabs <= 0 && controller.getCurrentProfile() != null) {
        /**
         * All tabs are closed, log out current user.
         */
        controller.logoutCurrentProfile();
    }

但它有一个细节,我可能不知道用户何时关闭浏览器 或制表符。

另一种解决方案。

  • 使用投票在 javascript 中调用函数并询问是否记录。 尝试使用此功能,但没有积极的结果。

    function ComprobarSessionExpirada() {
    
    var request = false;
    if(window.XMLHttpRequest) { // Mozilla/Safari
        request = new XMLHttpRequest();
    } else if(window.ActiveXObject) { // IE
        request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    var url = '/ACP_3.0/pag/resumen.jsf';
    request.open('POST', url, true);
    request.onreadystatechange = function() {
        alert('a');
        if(request.readyState == 4) {
            var session = eval('(' + request.responseText + ')');
            if(session.valid) {
                alert('ok');
                // DO SOMETHING IF SESSION IS VALID
            } else {
                alert('Your Session has expired');
                window.location = '/ACP_3.0/index.jsf';
            }
        }
    }
    request.send(null);
    }
    

编辑:

我忘了提到我在 bean 中维护用户信息 应用程序,这可以让我知道用户的聊天状态 做了。

因此,您需要确定用户何时关闭会话 直接(注销)或间接(关闭浏览器或超时​​), 因为如果它不关闭会话,用户的状态 始终保持在线。

为了识别他何时下线,我使用了前奏 会话的破坏。 实现 HttpSessionListener 其中 方法 sessionDestroyed 改变用户在应用程序中的状态 豆子。

【问题讨论】:

    标签: javascript session jsf-2 tabs primefaces


    【解决方案1】:

    我可能不是唯一一个这样认为的人;不要试图将会话绑定到选项卡,浏览器不是出于某种目的而设计的。

    大多数正常用例都会受到关闭选项卡时会话将终止的设计的影响。如果用户不小心关闭了最后一个标签怎么办?

    【讨论】:

    • 添加一些额外的信息。对你的问题。如果用户不小心关闭了他的最后一个标签怎么办?用户必须重新登录。 (假定成本)
    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多