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

Javascript 如何阻止同一浏览器中不同选项卡的用户同时登录,javascript,jquery,spring-mvc,Javascript,Jquery,Spring Mvc,我的应用程序使用Spring3MVC,如果用户打开两个选项卡并尝试使用不同的用户ID同时登录,我希望将用户重定向到同一页面 与gmail功能一样,如果两个用户从两个不同的选项卡登录,第一个用户将注销并看到会话超时消息。同一浏览器的多个选项卡使用相同的会话,因此如果您只是禁止已登录的用户访问登录页面,这种情况永远不会发生 这样做的唯一可能性是浏览器不支持cookie,并且容器返回URL重写以维护会话。在这种情况下,用户可以在同一浏览器中同时拥有两个会话。但是在这种情况下,您可以简单地强制您的web

我的应用程序使用Spring3MVC,如果用户打开两个选项卡并尝试使用不同的用户ID同时登录,我希望将用户重定向到同一页面


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

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


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

请尝试下面附加的代码

单击登录时,在本地存储中设置一个带有某个密钥的密钥(例如“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();
        }
      }
    });

谢谢,我强制使用了饼干。但是现在我可以在两个不同的选项卡中打开登录页面,并使用不同的登录凭据提交这两个页面。假设我用user1提交tab1,pass1,然后用user2提交tab2,pass2。在这种情况下,user1会话将失效,他在单击任何链接时出错。我想阻止这种情况,并向user1显示一条消息,说明他已注销。如果用户在未登录时打开登录页面两次,这将无法正常工作。您需要在表单本身中强制执行某些内容。@Don Roby,这正是我要找的。@JB Nizet感谢这对同一用户有效。但是,如果有人使用不同的用户名从不同的选项卡登录,则此操作将失败。否。首先打开登录页面上的两个选项卡。在第一个页面中,您使用user1登录。然后转到第二个选项卡,并使用user2登录。来自第二次登录的请求与第一个选项卡中的会话关联,从会话中,您知道此请求来自user1,因此显示一条错误消息,说明“您已以user1身份登录”。