Вот функция, которую я позаимствовал / изменил из расширенного модуля форума, чтобы проверить, находится ли конкретный пользователь в сети. Он проверяет таблицу сеансов для пользователей в течение определенного промежутка времени. Добавьте его в пользовательский модуль и при необходимости вызовите:
function MODULENAME_check_user_online($uid) {
$interval = REQUEST_TIME - variable_get('user_block_seconds_online', 900);
$query = db_select("users", "u")->distinct()->fields("u", array("uid", "name"));
$s_alias = $query->join("sessions", "s", "u.uid = s.uid");
$query->addExpression("MAX({$s_alias}.timestamp)", "maxtime");
$query
->condition("{$s_alias}.timestamp", $interval, ">=")
->condition("{$s_alias}.uid", $uid, "=")
->groupBy("u.uid, u.name")
->orderBy("maxtime", "DESC");
$check_user_logged_in = $query->execute();
if ($account = $check_user_logged_in->fetchObject()) {
return TRUE;
}
return FALSE;
}