Под данным выражением понимается количество или список посетителей, активность на сайте которых была зарегистрирована в определенный промежуток времени (к примеру за последние 15 минут).
Главное уяснить, что связь с php приложением не постоянна! Это не ICQ, где можно узнать статус пользователя по соединению с ним. Здесь php сценарий выполнился и отдался пользователю, а что он дальше сделает известно только ему. Он может продолжить ходить по сайту, а может и закрыть окно.
Итак, переосмыслив задачу, мы выяснили, что нам необходимо выбирать пользователей, которые были активны ближайшие, допустим, 15 минут.
Как нам это сделать? — Очень просто. Необходимо просто считать сессии пользователей.
Вариант 1.
Если сессии хранятся в файлах (используются стандартные сессии), то нам необходимо открыть директорию, в которой хранятся сессии и посчитать количество файлов, изменённых не более 15 минут назад.
Если у Вас не установлена директория для хранения сессионных файлов, необходимо первой строкой написать:
session_save_path("/path/to/custom/directory");
А теперь собственно функция, которая выводит количество пользователей, активных в течении последних 15 минут:
<?php
function getOnlineUsers()
{
if ($directory_handle = opendir(session_save_path()))
{
$count = 0;
while (false !== ($file = readdir($directory_handle)))
{
if($file != '.' && $file != '..')
{
//Здесь мы выбираем файлы измененные не более 15 минут назад
if(time()- fileatime(session_save_path() . '\\' . $file) < 15 * 60)
{
$count++;
}
}
}
closedir($directory_handle);
return $count;
}
else
{
return false;
}
}
?>
Преимущества:
— Не надо заморачиваться с базой, сессия стартует одной строкой — session_start();
— Не надо удалять сессии (они удаляются автоматически по истечении срока, указанного в php.ini);
Недостатки этого варианта:
— Мы узнаем только количество посетителей, а не их данные, для этого случая все-таки подойдёт 2 вариант.
Вариант 2.
Это очень просто сделать, когда сессии пользователей хранятся в базе. Здесь количество пользователей онлайн выбирается с помощью одного запроса.
пример:
SELECT COUNT(`id`)
FROM `users_sessions`
WHERE `time`>NOW()-15*60
Так же можно с легкостью выбрать данные пользователей.
например, логины:
SELECT `login`
FROM `users_sessions`
WHERE `time`>NOW()-15*60
Решать Вам, что необходимо Вашему сайту: более подробная статистика или лёгкая сводка.