代码之家  ›  专栏  ›  技术社区  ›  Zmur

阻止浏览器选项卡之间的会话共享

  •  0
  • Zmur  · 技术社区  · 7 年前

    我有一个讨厌的错误:打开两个带有登录页面的选项卡,然后在每个选项卡中使用不同的用户登录。来自登录的第一个选项卡的所有请求返回“unauthorized”错误。 前端使用会话cookie,第二次成功登录第二个选项卡时,该cookie似乎被覆盖,并且在第一个选项卡中浏览时尝试使用此新cookie。

    使用Spring Boot 1.5.8,Spring会话2,AngularJS 1.7.2 配置非常标准,所以我不认为这些样板文件会有用。

    UPD: 当用户登录但会话不正确时,我寻求某种方法来防止这种情况。阻止此浏览器中的第二次登录尝试,或者在另一个用户登录同一浏览器时踢踢已登录的用户-所有操作都可以。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Rathma    7 年前

    如果您在本地存储上设置了某种令牌,如下面的代码(在服务器的成功完整登录响应中),则可以从其他选项卡注销用户

     localStorage.setItem('logout', 'logout-' + Math.random());
    

    并将此功能作为主应用程序模块中的运行块:

     function logoutFromOtherTabs(authService, $timeout) {
            'ngInject';
    
            window.addEventListener('storage', function (event) {
                if (event.key === 'logout') {
                    $timeout(function () {
                        authService.logout();
                    }, 1000);
                }
            });
    
    推荐文章