防止浏览器选项卡之间的会话共享
Posted
技术标签:
【中文标题】防止浏览器选项卡之间的会话共享【英文标题】: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 是的,就是这样。但是其他人如何解决这个问题?可能是某种自动刷新登录页面? 【参考方案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);
);
【讨论】:
以上是关于防止浏览器选项卡之间的会话共享的主要内容,如果未能解决你的问题,请参考以下文章