2010-12-11 2 views
2

Я пытаюсь сделать то, что говорит «Х количество пользователей в данный момент просматривает эту страницу» через PHP. Как мне это сделать? Спасибо.Обнаружение пользователей в Интернете: PHP

+0

Если у вас есть массовое движение, это не очень хорошая идея. –

+2

Этот вопрос должен ответить на ваш вопрос: http://stackoverflow.com/questions/890820/find-out-how-many-users-are-online-in-php – thejh

ответ

1

Существует нет отказоустойчивого способа сделать это, но есть несколько вариантов.

  1. Сохраните последний раз, когда человек посетил базу данных. Если он находится в определенном пороге (скажем, 5 минут), они находятся в сети.
  2. Этот способ менее надежный, но иногда пинг (правильный термин?) сервер с AJAX, чтобы сказать, что вы все еще в сети. Это позволяет пользователю иметь страницу в течение длительного времени без выключения «онлайн-времени».

Вы даже можете использовать комбинацию из двух.

Если у вас много трафика, вы должны кэшировать первый вариант. Вы не хотите запускать SELECT * FROM users WHERE lastvisit > UNIX_TIMESTAMP() - 18000 для каждой загрузки страницы. Другим вариантом было бы запустить демон за каждую минуту или около того и сохранить онлайн-пользователей в отдельной таблице.

Примечание: предполагается, что вы действительно означает пользователей, когда вы это указали. Если вы хотите получить номер гостей, см. Ответ @ code_burgar.

0

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

2
  1. Создание таблицы базы данных, которая хранит:
    • хэш IP пользователя и комбинации UserAgent
    • Timestamp
  2. После каждого PageLoad, хранить хэш пользовательского IP и UserAgent комбинации вместе с током временная метка в базе данных
  3. База данных запросов для количества уникальных записей, имеющих временную метку, которая попадает в СЕЙЧАС() - диапазон X минут
  4. Показать приблизительное количество активных пользователей

Расширьте основную идею по

  1. Имея интервал породил AJAX вызов скрипта, который обновляет БД для учета пользователей, оставаясь на странице больше, чем X минут
+0

Этот ответ будет для подсчета количества «гостей» в Интернете , – Jonah

+0

Поскольку ОП не уточнил, что он считает «пользователями», ваш комментарий может быть или не быть релевантным :) –

4

В Интернете нет понятия «просмотр в настоящее время», потому что все происходит как непостоянные соединения. Самое близкое, что вы можете получить, это «X пользователей просматривали эту страницу в течение последних N секунд» (и если вы выберете значение N, которое достаточно мало, вы можете сказать, что это в значительной степени эквивалентно).

Тогда, чтобы пользователь A данные представления, основанные на действиях пользователя B, в PHP, вы должны иметь некоторое постоянное хранилище данных, как правило, в качестве базы данных, как MySQL (но Memcached или XCache может работать также , если вы действительно не беспокоитесь о потере данных при сбое сервера).

Просто напишите такие элементы, как «пользовательский X-просмотр страницы Y в момент времени Z», в постоянное хранилище, а когда отображается страница Y, запросите хранилище для всех видов страницы Y в последние N секунд и подсчитайте номер различных пользователей.

В SQL:

INSERT INTO visits (user, page, time) VALUES (?,?,NOW()) 

SELECT COUNT(DISTINCT user) FROM visits 
WHERE page = ? AND time < NOW() - INTERVAL 10 SECONDS 

Вы могли бы иметь пользователь сказать серверу «Я по-прежнему просмотра», подав запрос AJAX на регулярной основе (или с небольшой iframe на странице, которая перегружает себя через каждые несколько секунд без JavaScript).

+0

+1 для идеи