Ограничить ли клиент посещением веб-сайта с 1 вкладкой и 1 браузером? - PullRequest
5 голосов
/ 04 декабря 2009

Я хотел бы сделать что-то вроде play.clubpenguin.com.

Что делает то, что при посещении сайта, возможно, с использованием Firefox или IE, если вы открыли новую вкладку или используете другой браузер, при повторном посещении этого сайта будет отображаться что-то вроде: браузер, который открыл эту страницу "или что-то в этом роде.

Как это сделать? (Запрос клиента)

Дополнительная информация: Сайт Flash-сайта

РЕДАКТИРОВАТЬ:

Хорошо, я думаю, что это сложный вопрос, ну, в общем, можно ли это сделать с помощью php, mysql и JS?

Ответы [ 5 ]

7 голосов
/ 04 декабря 2009

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

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

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

Этот метод должен работать, даже если пользователь открывает дополнительные браузеры на других компьютерах. Он не использует IP-адреса для установления личности. И нет никаких шансов, что пользователь каким-то образом будет «заблокирован» навсегда, потому что каждый раз, когда он снова открывает страницу, вы сбрасываете сохраненный токен.

Эта идея похожа на то, как некоторые фреймворки вставляют токен проверки в формы для предотвращения подделки межсайтовых запросов атак.

2 голосов
/ 09 июня 2014

попробуйте использовать следующий код:

    window.onload = function(){
    if (document.cookie.indexOf("_instance=true") === -1) {
    document.cookie = "_instance=true";
    // Set the onunload function
    window.onunload = function(){
        document.cookie ="_instance=true;expires=Thu, 01-Jan-1970 00:00:01 GMT";
    };
    // Load the application
    }
    else {
    // Notify the user
    }
    };

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

0 голосов
/ 04 декабря 2009

Решение:

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

0 голосов
/ 04 декабря 2009

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

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

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

0 голосов
/ 04 декабря 2009

Несколько вариантов приходят на ум ...

  1. Когда они впервые открывают сайт, вам необходимо сохранить текущее состояние пользователя в файле cookie или аналогичном файле, который вы будете проверять каждый раз, когда открываете сайт. Если состояние Активно, то это означает, что у них открыто другое окно. Проблема в том, что состояние очищается, когда они покидают исходное окно сайта - вам нужно прослушать событие window.onunload и очистить состояние в этот момент - но вы не можете на 100% гарантировать, что это произойдет.
  2. В противном случае вы можете разместить на сайте скрипт, который пингует серверный скрипт каждые n секунд, уведомляя сервер, что для этого клиента открыто окно, и предотвращая открытие новых окон до ошибка в пингах.
  3. Чтобы усложнить задачу, вы можете поддерживать постоянное соединение между сервером и клиентом (через сокеты или подобное), что будет помнить одно и то же. Меньше звонков от клиента, немного сложнее в настройке. См. http://www.kirupa.com/developer/flash8/php5sockets_flash8.htm для базовой информации о flash + сокетах.
  4. Учитывая, что вы работаете с Flash, вы можете просмотреть локальные общие объекты (flash cookie), чтобы сохранить состояние. Все еще возможно пропустить событие unload, но, по крайней мере, cookie сохраняется во всех сеансах браузера и браузерах всех типов.

Вариант 3 - лучшее ИМХО.

...