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

Для этого создадим отдельную таблицу. Допустим назовем ее user_online. Колонки user_id типа int и колонка date типа datetime.
Напишем функцию, которая должна срабатывать, при входе пользователя на страницу.

function set_user_online($user_id){
$query = mysql_query("SELECT count(*) AS count FROM user_online WHERE user_id = ".intval($user_id));
$query = mysql_fetch_assoc($query);
if($query['count']>0)
$b = mysql_query("UPDATE user_online set date = NOW() where user_id = ".intval($user_id));
else
$b = mysql_query("INSERT INTO user_online (user_id, date) values ('".intval($user_id)."', NOW())");
}
}

Ну тут все понятно. Если есть запись, то обновляем дату, иначе добавляем запись. Функция NOW() возвращает текущее время.
Дальше надо сверять время в базе и текущее, и удалять записи, у которых интервал больше определенного значения. У меня будет 10 минут.

function check_status(){
$query =  mysql_query("DELETE FROM user_online WHERE (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(date))>600");
}

Тут используется функция UNIX_TIMESTAMP, которая возвращает количество секунд прошедших с 1970-01-01 00:00:00 GMT.

Теперь нужно запускать эту функцию. Можно воспользоваться cron’ом – система для автоматического запуска программ и скриптов на сервере в определённое время.
Для выполнения php скриптов из cron необходим бинарный интерпретатора PHP. Для управления расписанием запсука команд, нужно ввести ‘crontab -e’, которая откроет в текстовом редакторе файл конфигурации cron.
Пример конфигурационного файла.

# m h  dom mon dow   command
*/10 *  * * * php /var/www/site/cron/status.php

Тут m h dom mon dow command – это минуты часы день месяц день_недели имя_пользователя команда. Описывать все про cron я не буду, да и в инете можно найти.
Скажу только, что * – любое значение, / – периодичность. Например, ‘*/10 в поле «минуты» означает «каждые 10 минут», а * в поле часы означает «в любой час». Дальше команда php /var/www/site/cron/status.php запсукает скрипт, в которой находится вызов функции check_status().
Ну вот и все. Все шишки админу :)

Можно прочесть также:

3 комментариев “Онлайн/оффлайн статус пользователя на сайте”

  1. John:

    Админ можешь написать здесь, либо отправить мне на мыло как сделать вывод онлайн/оффлайн сервера? Есть сервер с динамическим ip, но с постоянным адресом, к примеру site.ru. Мне нужно на сайте вывести статус, когда будет либо пинговаться этот сервер, либо когда будет пинговаться порт, на котором стоит программа – 19132. Лучше всего идея с портом. Могу на сервер поставить скрипт, сервер стоит на Linux, последняя версия Debian(сервер мой).

  2. admin:

    а зачем придумывать велосипед, помоему полно сервисов мониторинга доступности и работоспособности сайтов, с уведомлением на емейл и тд… писать конкретные сервисы не стану думаю по запросу мониторинг доступности сайта найдешь не мало вариантов

  3. Artem:

    Чувак, большое спасибо!) Очень помогло)