Настройте вашу таблицу login_tracking, чтобы она включала:
- session_id (varchar 100)
- user_id
- время (обновляется каждые 10 минут, пока есть активность)
- start (дата / время, когда они впервые входят в систему)
- end (datetime, когда сессия закрывается либо закрытым браузером, либо
выход из системы)
Код:
$date = date('Y-m-d H:i:s');
$time=time();
$time_check=$time-600; // user will be marked online if they have any activity for 10 minutes
$session=session_id();
// check if the user is currently listed as online in the database
$getactiveession = mysql_query("SELECT * FROM login_tracking WHERE session = '$session' AND end IS NULL");
$active_session = mysql_num_rows($getactivesession);
// if they are not listed as online, insert a row for them
if($active_session == "0"){
$make_active = mysql_query("INSERT INTO login_tracking (session, user_id, time, start) VALUES('$session', '$user', '$time', '$date')");
}
else {
// UPDATE user's current time if they are already currently logged in
$update_session = mysql_query("UPDATE login_tracking SET time = '$time', user_id = '$user' WHERE session = '$session'");
}
// get total users online
$gettotalonline = mysql_query("SELECT * FROM login_tracking");
$total_online = mysql_num_rows($gettotalonline);
// if over 10 minutes and no new activity (time column has not been updated), update end session time
$end_session_time = mysql_query("UPDATE login_tracking SET end = '$date' WHERE time<$time_check");
При этом вы можете отобразить список всех онлайн-пользователей, а также ссылки на их профили, аватары и т. Д.
Единственное, о чем я могу подумать, это при вставке новой строки для нового вошедшего в систему пользователя, вам может потребоваться выполнить команду "WHERE end = '0000-00-00 00:00:00" вместо "WHERE end IS NULL" ", не уверен, что вы можете сделать IS NULL в указанное время.
Ответ на ваш комментарий # 1
У меня есть ПОХОЖАЯ функция, как функция на моем сайте, которая находится на каждой странице, поэтому независимо от того, на какой странице просматривает мой пользователь, они будут считаться зарегистрированными. Поэтому ее легко внедрить везде.
Тем не менее, вам, вероятно, понадобится настроить его как cronjob, чтобы запускать каждую минуту или 10 минут, чтобы проверять записи в течение 10 минут. Я говорю это потому, что ... если пользователь закрывает свой браузер, но не выходит из системы, он не будет обновлять свою запись в базе данных, пока другой человек (вошедший в систему или гость) не получит доступ к странице, на которой выполняется вышеуказанный код. Если у вас работает cronjob, то проблем не будет. (это также касается вашего комментария о том, что время окончания сеанса будет выполнено, мой сайт не требует, чтобы вы были так довольны, что вы подняли вопрос, поэтому я считаю, что для вас это должен быть кроной).
Что касается перенаправления их на страницу выхода из системы, я не уверен, как это будет работать в этом случае, поскольку их страница не обновляется. Вероятно, это должен быть Ajax или что-то в этом роде.