Как избежать открытия двух окон браузера? - PullRequest
2 голосов
/ 14 марта 2012

Я бы хотел избежать возможности открытия двух окон приложений (или вкладок).Если мое приложение (LAMP + Javascript) установлено на http://www.domain.com, а пользователь просматривает страницу http://www.domain.com/user/, он / она не может открыть другое окно, например http://www.domain.com/system/. Если он /она открывает другое окно, приложение должно показать сообщение об ошибке.

Это возможно?

Для любопытных людей : мне нужно это поведение, потому что мое приложение использует некоторые данные сеансаопределить последовательность действий.Если пользователь открывает новое окно в том же браузере, обычно все в порядке, но если он запускает новую последовательность, предыдущая (в другом окне) будет потеряна.

Ответы [ 5 ]

2 голосов
/ 15 марта 2012

Несмотря на то, что все остальные сказали здесь, что вы не можете помешать кому-либо открыть ваш сайт дважды, для вас может быть обходной путь. Обратите внимание, что это не 100% -ное решение, и вам потребуется разработать дальнейший код, основанный на этом.

Насколько я понимаю, у вас есть следующие проблемы:

  1. Как определить, открыла ли пользователь вашу страницу с помощью окна / тега, который разделяет данные сеанса (т.е. две вкладки в Chrome, 2 окна Chrome и т. Д.) - это самая простая часть.
  2. Как определить, открыла ли пользователь вашу страницу в другом браузере (то есть одновременно открыть в FF & Chrome) - это хитрый вопрос.

Однако - вы можете использовать LSO - Локальные общие объекты , чтобы выполнить это. Это фрагменты данных, аналогичные файлам cookie, хранящимся на стороне клиента. И они совместимы с браузером и доменом. Вы можете найти хорошую библиотеку EVERCOOKIE для их использования здесь .

Установив такой файл cookie, вы сможете отслеживать пользователя, даже если он открывает новое окно или даже если он открывает вашу страницу в другом браузере, если браузеры используют одну и ту же установку Flash и т. Д.

Обратите внимание, что это не помешает кому-то открыть два окна напрямую, но позволит вам отправить его в то же состояние последовательности, что и в другом окне, например.

Вы также должны знать, что это не 100% решение. Всегда найдется какая-то хитрость, чтобы обойти это, хотя я думаю, что обычные пользователи не смогут получить это ...

2 голосов
/ 14 марта 2012

Как уже упоминалось выше - вы не можете запретить кому-либо дважды открывать ваш сайт.Тем не менее, как я вижу, ваша проблема заключается в том, чтобы убедиться, что каждый сеанс браузера уникален.Существует много подходов для достижения этой цели, например, клиент может сгенерировать случайное число и отправить его через ajax на сервер, который будет использоваться вместо идентификатора сеанса, у вас могут быть некоторые проблемы с сохранением, но все это легкоснасти.

2 голосов
/ 14 марта 2012

Вы не можете помешать кому-либо дважды открыть ваш сайт.

Возможно, вы сможете использовать новый сеансовый ключ для каждой страницы, но это может стать немного рискованным ...

1 голос
/ 14 марта 2012

Единственный способ сделать это - скрыть / удалить контент, если пользователь вошел в систему где-то еще

Так что вам а) понадобится пользователю войти в систему ... и б) записать, когда пользователь вошел в систему ... и в) записать, когда пользователь вышел из системы

Все еще существуют проблемы с этим методом - когда вы решаете, когда пользователь закрыл браузер и должен быть удален из списка "вошедших в систему" ...

Короче, ответ таков: вы не можете надежно остановить это ...

0 голосов
/ 14 марта 2012

Я бы делал это, используя сеансы на стороне сервера (т.е. php), и использовал бы события load и window.unload для установки и уничтожения сеансов.

Если сеанс уже создан, то любое открывающееся после этого окно должно проверять значение сеанса и принудительно закрываться после отображения сообщения об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...