webew
Войти » Регистрация
 
JavaScript
Управление содержимым

Как отследить количество открытых окон сайта?

5 марта 2009, 10:36
Автор: Serg_pnz
Тему назвал... сейчас объясню.

Цель игры: не разрешить пользователю открыть несколько экземпляров окон по одному адресу, например http://site.ru/adress/
В идеале надо запретить все копии со всех браузеров данного компьютера.

Что имею: авторизацию на сайте (для неавторизованных этот вопрос не актуален), php, ajax (могу посылать запрос с установленным интервалом).

Какие будут идеи и соображения?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

alextop

Запретить вход из разных браузеров, как мне кажется, легко - для авторизации в каждом будет открываться новая сессия. Сессии можно держать в базе и запрещать больше одной на одного пользователя.
А вот несколько окон в одном браузере... надо подумать...

Встречал в статьях про comet такой подход: держать открытым соединение через ajax (посылать туда что-то время от времени) и не допускать других соединений. Правда серверу не позавидуешь...

Фактически, требуется какой-то общий ресурс (типа mutex), к которому JS должен получать экслюзивный доступ... Что за ресурс такой сходу не могу придумать...
05.03.2009, 17:03
Ответить
NO USERPIC

rgbeast

Например, юзер будет с каждым запросом к серверу отправлять следующее число из последовательности псевдослучайных чисел. Инициализация при загрузке страницы. Помнить текущее состояние будет JS со стороны клиента и сервер. Если число не совпало, то значит некорректное окно. Сервер для каждого клиента помнит только одно число, характеризующее его состояние.
05.03.2009, 17:47
Ответить

Serg_pnz

Спасибо большое, то что надо!

В плане "серверу не позавидуешь" - ему итак не позавидуешь, поскольку чат так и так будет отправлять запрос "ушел/не ушел" и "слушать" новые сообщения.
05.03.2009, 18:19
Ответить
NO USERPIC

alextop

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

Может к примеру надо дать окну уникальное имя в JSи все ссылки открывать с этим именем в _target. В итоге все будет грузиться в одном окне. Либо то же самое по сути, но с использованием фреймов.
05.03.2009, 18:21
Ответить

Serg_pnz

Нууууу... как вариант на скорую руку, - это число будет генериться пхп, передаваться например в md5 через get или сессию /*кстати аяксовый гет увидеть нельзя или я не знаю как))*/.
Надо немного додумать алгоритм и всё будет хорошо.
05.03.2009, 18:30
Ответить
NO USERPIC

alextop

Firebug покажет любой ввод/вывод, в том числе ajax. Если число генерится php, то оно легко перехватывается в браузере и используется потом где угодно. Вся суть в раздельной генерации последовательности на сервере и и на клиенте. В случае JS это проблематично спрятать, а ввод/вывод весь просматриватся...

Насчет постоянного соединения с сервером - в памяти будет постоянно висеть несколько экземпляров apache (или чего там еще), и их макс. количество определяется объемом памяти (а каждый занимает порядка 10-15М), что не есть хорошо. Вот неплохой обзор технологий push http://javascript.ru/ajax/server-push/overview

Мое мнение - серьезный чат лучше делать на специальном движке, например jabber-сервер...
06.03.2009, 11:42
Ответить

Serg_pnz

Спасибо, будем изучать.
PS: Это будет не совсем чат - онлайн игра.
10.03.2009, 10:23
Ответить

Serg_pnz

Это нам не поможет?

myAddress=java.net.InetAddress.getLocalHost();
myAddress2=java.net.InetAddress.getLocalHost();
host=myAddress.getHostName();
ip=myAddress2.getHostAddress();
11.03.2009, 09:42
Ответить

Serg_pnz

Решили делать на флеше, у которой общие куки для всех браузеров.
http://www.interface.ru/home.asp?artId=18725
16.03.2009, 10:49
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2024 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: Переходи сюда - статья о качественной стоматологии в Китае, с гарантией.