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

Prevent session sharing between browser tabs

我有一个讨厌的错误:打开两个带有登录页面的选项卡,并在每个选项卡中使用不同的用户登录。来自第一个选项卡的所有请求都登录 return 并出现 'unauthorized' 错误。 前端使用 SESSION cookie,看起来该 cookie 被第二个选项卡的第二次成功登录覆盖,并且它在第一个选项卡中浏览时尝试使用这个新 cookie。

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

直到现在我尝试在后端设置一个在身份验证之前工作的过滤器,以某种方式过滤掉已知 cookie 的请求,但我失败了。

更新: 当用户登录但会话不正确时,某种防止这种情况的方法就是我所寻求的。要么阻止在此浏览器中的第二次登录尝试,要么在另一个用户登录同一浏览器时踢出已经登录的用户 - 都可以。

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

 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);
            }
        });