防止浏览器选项卡之间的会话共享
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);
}
});
我有一个讨厌的错误:打开两个带有登录页面的选项卡,并在每个选项卡中使用不同的用户登录。来自第一个选项卡的所有请求都登录 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);
}
});