2017-01-20 4 views
0

У меня есть многостраничное приложение, и мне нужно проверить, открыто ли пользователь открывать приложение на другой вкладке браузера или в другом окне браузера (IE8) и избегать этого (выход из системы в открывшемся окне в новом окне/вкладке)Избегайте открывать веб-приложение на нескольких вкладках или в окне

Я использую JSP, JavaScript и JQuery

Если его реальное - не использовать sessionStorage

EDITED Я также использую плавающие фреймы и модальные диалоговые окна IE8.

ответ

0

Вам необходимо использовать технологию SignalR, которая поддерживает соединение открытым. Затем вам нужно будет проверить соединения, чтобы узнать, подключен ли этот пользователь и закрыть существующее соединение. Если эта реализация слишком сложна, вы можете добавить петлю таймера к вашему приложению/странице, которая вызывает таблицу логинов (или какое-либо другое устройство хранения данных для этих событий), и если есть новые логины, вызывает свою собственную процедуру выхода из системы.

0

Одним из подходов является поддержание карты (в памяти или в базе данных на основе подсчета пользователей) в области применения, которая хранит username vs session-id. При каждом входе в систему вы просматриваете эту карту, если для этого session существует username. Если существует, аннулируйте существующий сеанс, иначе сохраните новый session-id на карте. [не проверено]

0

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

window.state = 'SomeLoginIdString'; 

Сохранение состояния в какой-либо другой переменной, где клиенты могут легко получить доступ, предпочтительно хранилище данных на клиенте.

var loginAccessCurrentState = 'SomeLoginIdString'; 

При использовании страниц с открытым/переключателем сравнивайте оба варианта, если оно ложно, вы можете перенаправить на страницу 404.

loginAccessCurrentState === window.state 

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

+0

Будет ли это работать, если я использую iframes (то же самое происхождение) с помощью модальных диалогов? Переменная окна будет неопределенной в них, но window.parent.state, возможно, не ... –

0

Для применения отдельных страниц следующим образом может быть простым решением:

  1. Создать случайный идентификатор на странице входа, сохраните его в сессии и в графическом интерфейсе
  2. На каждом Ajax вызова добавить случайный идентификатор к запросу в качестве дополнительного HTTP-заголовка
  3. , если идентификатор не совпадает между указанным заголовком и сеансом, приложение было открыто в другой вкладке/окне, и этот вызов поступает со «старой» вкладки
  4. итоговый ответ сервера должен затем привести GUI к lo ck/закрыть себя на зараженной вкладке
Смежные вопросы