Ajax / Php - счетчик пользователей онлайн в реальном времени - PullRequest
1 голос
/ 30 ноября 2011

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

Я не могу найти ничего подобного в сети. Есть ли сценарий для этого?

Ответы [ 5 ]

1 голос
/ 30 ноября 2011

Вы, вероятно, могли бы хранить список всех сеансов в базе данных и обновлять «онлайн-время» каждый раз, когда кто-то посещает страницу. Затем проверьте, сколько сеансов было обновлено за последние x минут. Тем не менее, это не будет в реальном времени: в зависимости от количества минут, которое вы определили, оно будет немного отключено.

Даже Google Analytics (новая версия в реальном времени) иногда ошибается. Не беспокойтесь слишком сильно, если вы не можете сделать это правильно. ; -)

1 голос
/ 30 ноября 2011

Вы должны взглянуть на WebSocket.Существует множество демонстраций, в основном это приложение для чата в реальном времени, вы можете что-то взломать :) На мой взгляд, WebSocket выглядит немного накладно в вашем случае (вы просто хотите число, никаких настоящих двухсторонних)связи), но это хороший способ создавать приложения в режиме реального времени.

Вот несколько ссылок:

0 голосов
/ 20 января 2013

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

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

0 голосов
/ 30 ноября 2011

Чтобы расширить ответ Тома, вы можете создать таблицу, которая будет отслеживать сеансы в базе данных. Как минимум, поля должны быть session_id, ip_address, activity_time. Назовите их как хотите. Вам понадобится функция, которая выполняется при каждой загрузке страницы, которая соответствует записи в session_id и ip_address. Если соответствующая запись не существует, вы создаете ее; если совпадение сделано, то обновите время.

Несколько предостережений:

1) Получить правильный IP-адрес может быть сложно, особенно с пользователями AOL и / или прокси-пользователями. Вам нужно искать заголовки X_Forwarded_For. Если они существуют, для пользователя используйте этот адрес, в противном случае используйте $ _SERVER ['REMOTE_ADDR']. Я бы посоветовал найти X_Forwarded_For для вашей настройки, потому что я не уверен, что он доступен для всех установок

1a) если вы не получите правильный IP-адрес, некоторые пользователи будут создавать новую запись при каждом просмотре страницы

2) Вам нужен способ удалить устаревшие сеансы. Я предлагаю как часть функции, которая обновляет время активности, он также проверяет наличие любого времени активности, которое больше 5 минут (я использую 15 минут), и, если это так, удаляет соответствующую запись.

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

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

0 голосов
/ 30 ноября 2011

Насколько я знаю, нет способа отследить, когда пользователь покидает ваш сайт, если не считать кнопку выхода из системы (чего можно легко избежать, просто закрыв окно)

...