如何在同一浏览器中阻止来自不同选项卡的同时用户登录

时间:2012-07-11 11:05:58

标签: javascript jquery spring-mvc

我的应用程序使用spring3 mvc,如果用户打开两个标签,我想将用户重定向到同一页面。尝试使用不同的userId同时登录。

与gmail功能一样,如果两个用户从两个不同的选项卡登录,则第一个用户将获得注销&查看会话超时消息。

2 个答案:

答案 0 :(得分:2)

同一浏览器的多个选项卡使用相同的会话,因此如果您只是禁止已登录用户访问登录页面,则不应发生这种情况。

唯一可能的做法是浏览器不支持cookie,并且容器会回退到URL重写以维护会话。在这种情况下,用户可以在同一浏览器中同时拥有两个会话。但在这种情况下,您可以简单地强制使用cookie作为您的webapp。

答案 1 :(得分:0)

尝试下面的附加代码。

在单击“登录”时,使用某些键在本地存储中设置一个键(例如“ Y”)。将以下提及的内容放在通用文件中,该文件将在整个应用程序中使用。更改本地存储的值时,将触发以下事件。当值为Y时。调用注销功能。登录后,清除本地存储。

While Clicking login - > CLEAR_USER_SESSION - > Y - This will Logout other Session's of the Same Application in the Same Browser as per the Below Code.

After Login - Change the Value to N or Empty - CLEAR_USER_SESSION  - > 'Y' or ''

window.addEventListener('storage', function(event) {
      if (event.key == 'CLEAR_USER_SESSION') {
        var winUrl = window.location.href;
        var terminateSession =event.newValue;
        var homepage = "N";
        if(document.getElementById("empTrId")){
            homepage = "Y";
        }

        if(terminateSession && terminateSession.trim() == "Y" && !winUrl.includes("loginAction.do?method=logout") 
                && !winUrl.includes("login.jsp") && homepage == "N"){
            logout();
        }
      }
    });