Intereting Posts
Кто-нибудь нашел, что REGEX «\ b» не работает в MYSQL? Хранимая процедура MySQL или сложный запрос Тестирование на закрытие PHP без ссылки на внутренний класс Closure Проблема с Imagick, а также с phmagick: делегат Postscript не удалось / Нет такого файла или каталога как OpenID различается между разными входами на той же конечной точке OpenID Создание меню выбора в PHP по умолчанию, выбранному из MySQL db PHP nodeValue strips html tags – альтернатива innerHTML? Неопределенная переменная: позиция Проверка языка браузера на PHP? Как отключить кнопку в условии if Когда следует использовать транзакции MySQL? Как настроить ответ косой черты на весь канал? Функция PHP session_start (): зачем мне это нужно каждый раз, когда я использую что-либо, связанное с сеансами PHP Автоматическое завершение статуса для всех существующих заказов на обработку в WooCommerce вставлять данные в MYSQL с помощью массива PHP

Как избежать открытия двух окон браузера?

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

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

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

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

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

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

Однако для этого вы можете использовать LSO – Local Shared Objects . Это флеш-файлы cookie, похожие на данные, хранящиеся на стороне клиента. И ОНИ – СОВЕРШЕННО-БРАУЗЕР И СОВЕРШЕНСТВОВАННЫЕ СОВМЕСТИМЫ. Вы можете найти красивую библиотеку под названием EVERCOOKIE для использования здесь .

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

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

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

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

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

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

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

Таким образом, вы должны: a) потребовать от пользователя входа в систему … и b) записи при входе пользователя в систему … и c) записи, когда пользователь вышел из системы

Есть еще проблемы с этим методом – когда вы решаете, когда пользователь закрыл браузер и должен быть удален из списка «вошел в систему» ​​…

Короче говоря, вы не можете надежно остановить это ….

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

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