【问题标题】:Prevent session sharing between browser tabs防止浏览器选项卡之间的会话共享
【发布时间】:2019-04-27 19:47:51
【问题描述】:

我有一个讨厌的错误:打开两个带有登录页面的标签,并在每个标签中使用不同的用户登录。来自登录的第一个选项卡的所有请求都返回“未经授权”错误。 前端使用 SESSION cookie,看起来该 cookie 被第二个标签页的第二次成功登录覆盖,它在第一个标签页中浏览时尝试使用这个新 cookie。

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

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

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

【问题讨论】:

  • 这是正常和预期的行为。如果您没有这种行为,那么每次您在新标签页中打开链接时都会丢失会话。
  • 你想要什么?
  • @Rachmaninoff 我倾向于防止其他用户再次登录。
  • 如果在登录前打开了两个标签页,则无法解决。
  • @Rachmaninoff 是的,就是这样。但是其他人如何解决这个问题?可能是某种自动刷新登录页面?

标签: angularjs spring cookies spring-security spring-session


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-05-27
    • 2011-04-27
    • 2021-05-07
    • 2011-09-08
    • 1970-01-01
    • 2019-01-17
    • 2015-10-05
    • 2012-03-22
    • 2013-12-18
    相关资源
    最近更新 更多