В системе управления контентом 1С-Битрикс часто возникает необходимость отслеживать статус пользователей, чтобы отображать их активность на сайте или в интерфейсе. Для этого существует полезный статический метод CUser::IsOnLine
, который позволяет определить, находится ли пользователь в сети.

Этот метод проверяет время последней активности пользователя и сравнивает его с указанным интервалом времени, что дает возможность точно понять, является ли пользователь активным или нет.
Описание метода CUser::IsOnLine
Метод CUser::IsOnLine
используется для проверки, находится ли пользователь в сети на основе его последней активности. Он является статическим, что означает, что его можно вызвать без создания объекта класса CUser
. Метод принимает два параметра:
Параметры метода:
$id
(обязательный) — ID пользователя, чей статус нужно проверить.$interval
(необязательный) — интервал времени в секундах, в течение которого пользователь считается "онлайн". Если параметр не передан, используется значение по умолчанию, которое можно получить с помощью методаGetSecondsForLimitOnline()
.
Пример использования:
CUser::IsOnLine($USER->GetID());
Этот вызов проверяет, находится ли текущий пользователь (ID которого доступен через $USER->GetID()
) в сети.
Чтобы метод работал, необходимо в init.php добавить
$eventManager = Bitrix\Main\EventManager::getInstance(); $eventManager->addEventHandler('main', 'OnBeforeProlog', 'OnBeforeProlog'); function OnBeforeProlog() { global $USER; if ($USER->IsAuthorized()) { CUser::SetLastActivityDate($USER->GetID()); } }
Реальные примеры использования
1. Проверка статуса пользователя
Самый простой способ использования метода — это проверка, находится ли пользователь в сети:
if (CUser::IsOnLine($USER->GetID())) {
echo "Пользователь " . $USER->GetFullName() . " в сети.";
} else {
echo "Пользователь " . $USER->GetFullName() . " не в сети.";
}
В этом примере метод CUser::IsOnLine
проверяет статус пользователя по его ID и выводит соответствующее сообщение.
2. Отображение статуса пользователя в профиле
Для отображения статуса пользователя в интерфейсе можно использовать условие, которое будет изменять цвет текста в зависимости от того, онлайн ли пользователь:
$userId = $USER->GetID();
if (CUser::IsOnLine($userId)) {
echo "В сети";
} else {
echo "Не в сети";
}
Здесь используется условие для отображения статуса пользователя в цвете — зеленом, если он в сети, и красном, если оффлайн.
3. Список пользователей с их статусом
Можно создать список нескольких пользователей с их текущим статусом:
$users = [1, 2, 3]; // Массив ID пользователей
foreach ($users as $userId) {
$user = new CUser;
$user->GetByID($userId);
echo $user->GetFullName() . ': ';
echo CUser::IsOnLine($userId) ? "в сети
" : "не в сети
";
}
Этот код позволяет пройтись по массиву пользователей и вывести их имя с соответствующим статусом.
4. Определение статуса для чата
Часто бывает необходимо определить, доступен ли пользователь для общения в чате. Используя метод CUser::IsOnLine
, можно управлять отображением кнопки чата:
if (CUser::IsOnLine($USER->GetID())) {
echo "Вы можете начать чат!";
} else {
echo "Пользователь оффлайн.";
}
В этом примере показывается, доступен ли пользователь для чата в зависимости от его статуса.
5. Фильтрация пользователей по статусу
Вы можете отфильтровать пользователей, чтобы получить только тех, кто в сети:
$onlineUsers = [];
foreach ($users as $userId) {
if (CUser::IsOnLine($userId)) {
$onlineUsers[] = $userId;
}
}
echo "Онлайн пользователи: " . implode(", ", $onlineUsers);
Этот код создает список пользователей, которые находятся в сети, и выводит их ID.
6. Уведомление о новых сообщениях
Когда необходимо отправить уведомление пользователю, который находится в сети, можно использовать метод CUser::IsOnLine
для уведомления:
if (CUser::IsOnLine($recipientId)) {
echo "Уведомление: Сообщение отправлено пользователю " . $recipientName . ", который сейчас в сети.";
} else {
echo "Уведомление: Сообщение отправлено пользователю " . $recipientName . ", который не в сети.";
}
Здесь проверяется, в сети ли получатель, и на основе этого выводится соответствующее уведомление.
7. Статус в административной панели
Для администраторов важно видеть, активен ли пользователь, например, на странице управления пользователями:
if (CUser::IsOnLine($userId)) {
echo "Активен";
} else {
echo "Неактивен";
}
Этот код позволяет отображать активность пользователей в админке с помощью различных цветов.
8. Уведомление о выходе из системы
Если пользователь выходит из системы, можно вывести уведомление с помощью метода CUser::IsOnLine
:
if (!CUser::IsOnLine($USER->GetID())) {
echo "Вы вышли из системы. Пожалуйста, войдите снова.";
}
Этот код отображает сообщение, если пользователь не в сети, например, после выхода из системы.
Важные аспекты работы метода
- Интервал активности: Параметр
$interval
позволяет настроить, за какой период времени после последней активности пользователь будет считаться онлайн. Если интервал не передан, используется значение по умолчанию. - Обновление времени активности: Метод
CUser::IsOnLine
использует полеLAST_ACTIVITY_DATE
из таблицыb_user
для определения, когда был последний визит пользователя. - Производительность: Поскольку метод работает с базой данных, большое количество запросов для проверки статуса пользователей может нагрузить сервер. Рекомендуется использовать этот метод эффективно и избегать частых запросов в условиях большого количества пользователей.
Заключение
Метод CUser::IsOnLine
в 1С-Битрикс предоставляет удобный способ для мониторинга активности пользователей на сайте. С его помощью можно создать функциональность для отображения статуса пользователей, организации чатов, фильтрации онлайн-пользователей и других задач, связанных с определением состояния активности пользователей.