Запретить совместное использование сеанса между вкладками браузера

У меня неприятная ошибка: откройте две вкладки со страницами входа и войдите с разными пользователями в каждую из них. Все запросы с первой вкладки, которые вошли в систему, возвращают «неавторизованную» ошибку. Frontend использует файл cookie SESSION, и похоже, что этот файл cookie перезаписывается вторым успешным входом во вторую вкладку, и он пытается использовать этот новый файл cookie при просмотре на первой вкладке.

Использование Spring Boot 1.5.8, Spring-session 2, AngularJS 1.7.2 Конфигурация очень стандартная, поэтому я не думаю, что эти шаблоны были бы полезны.

До сих пор я пытался настроить фильтр на бэкэнде, который работает перед аутентификацией, чтобы каким-то образом отфильтровывать запросы, которые знают cookie, но мне это не удалось.

UPD: Я ищу какой-то способ предотвратить эту ситуацию, когда пользователь вошел в систему, но с неправильным сеансом. Либо блокирование второй попытки входа в систему в этом браузере, либо удаление уже вошедшего в систему пользователя, когда другой входит в систему в том же браузере - все подойдет.

Это нормальное и ожидаемое поведение. Если бы у вас не было такого поведения, вы бы теряли сеанс каждый раз, когда открываете ссылку на новой вкладке.

JB Nizet 26.11.2018 08:33

что ты хочешь?

Rathma 26.11.2018 08:41

@Rachmaninoff Я склоняюсь к предотвращению этого второго входа в систему от другого пользователя.

Zmur 26.11.2018 09:18

Если перед входом в систему открываются две вкладки, исправить это невозможно.

Rathma 26.11.2018 09:33

@Rachmaninoff да, это так. Но как другие обходят это стороной? Может быть, какое-то автоматическое обновление страницы входа в систему?

Zmur 26.11.2018 09:37

Вы хотите выйти из системы первым авторизованным пользователем?

Rathma 26.11.2018 09:38

Если это возможно, так и будет.

Zmur 26.11.2018 09:41
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
0
7
1 327
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);
            }
        });

Другие вопросы по теме