Главная » Администрирование Битрикс » Пользователи » Кто онлайн: список активных пользователей в Битрикс

Кто онлайн: список активных пользователей в Битрикс

Схема вывода списка активных пользователей онлайн через модуль статистики 1С-Битрикс

Список пользователей, находящихся на сайте прямо сейчас, — функция, востребованная и в закрытых сообществах, и как элемент социального доказательства ("на сайте сейчас 40 человек") в интернет-магазине. Разберём, как реализовать это в 1С-Битрикс.

Штатный модуль статистики

Модуль веб-статистики Битрикса хранит данные о визитах, включая информацию об авторизованных пользователях, — раздел Аналитика → Мониторинг → Онлайн в административной панели показывает список пользователей и гостей с активностью за последние минуты без необходимости писать собственный механизм отслеживания с нуля.

Программное получение списка активных пользователей

<?php

use Bitrix\Main\Loader;

Loader::includeModule('statistic');

$result = CUserOnlineFilter::GetList(
    [], ['ONLINE' => 'Y'], false, false, ['USER_ID', 'FULL_NAME', 'PARAMS']
);

while ($row = $result->Fetch()) {
    echo $row['FULL_NAME'] . PHP_EOL;
}

Класс модуля статистики даёт программный доступ к тому же списку, что виден в административной панели, — полезно для вывода счётчика или списка активных пользователей прямо на публичной части сайта, а не только для внутреннего просмотра администратором.

Нужна помощь с Битрикс?





    Определение "онлайн" по таймауту активности

    Пользователь считается онлайн не в буквальном смысле открытой вкладки браузера, а по факту недавней активности — обращения к серверу в пределах заданного временного окна (обычно несколько минут). Это означает, что счётчик всегда несколько приблизителен: пользователь, закрывший вкладку минуту назад, ещё какое-то время продолжает считаться "онлайн", пока не истечёт таймаут.

    Собственная реализация без модуля статистики

    <?php
    
    use Bitrix\Main\Data\Cache;
    
    global $USER;
    
    if ($USER->IsAuthorized()) {
        $cache = new CPHPCache;
        $key = 'user_last_seen_' . $USER->GetID();
    
        // сохранение метки времени последней активности,
        // например через CUserOptions или отдельную таблицу
        CUserOptions::SetOption('online', 'last_seen', time(), false, $USER->GetID());
    }

    Для нестандартных требований (например, показ статуса "онлайн" в чате поддержки с более точной детализацией, чем даёт штатный модуль) можно реализовать собственный механизм отметки активности, записывая метку времени при каждом обращении и сравнивая её с текущим временем при выводе — но для большинства типовых сценариев штатный модуль статистики закрывает задачу без дополнительного кода.

    Производительность при частой проверке статуса

    Если статус "онлайн" запрашивается очень часто (например, live-обновление списка активных пользователей через AJAX-опрос каждые несколько секунд), стоит учитывать нагрузку от таких частых запросов на базу данных — на проекте с высокой посещаемостью и активным использованием этой функции разумно кешировать результат на короткий срок (несколько секунд) вместо выполнения запроса на каждое обращение без исключения.

    Приватность и отображение "онлайн" другим пользователям

    Публичный показ статуса "онлайн" конкретного пользователя другим посетителям — не всегда желаемое поведение с точки зрения приватности: некоторые пользователи предпочли бы не показывать свою активность окружающим. Для сайтов с чувствительной аудиторией стоит предусмотреть настройку, позволяющую пользователю скрыть свой статус "онлайн" от других, а не считать его видимым по умолчанию для всех без исключения.

    Частые ошибки

    • Собственная реализация написана с нуля без проверки штатного модуля статистики. Дублирование уже существующей функциональности без реальной необходимости.
    • Частый AJAX-опрос статуса без кеширования на короткий срок. Излишняя нагрузка на базу при высокой посещаемости.
    • Нет возможности скрыть свой статус онлайн другим пользователям. Вопрос приватности не рассматривается при проектировании функции.

    Итог

    Штатный модуль веб-статистики уже содержит данные об активных пользователях, доступные и через административную панель, и программно через API модуля — для большинства сценариев реализовывать собственный механизм отслеживания активности с нуля не требуется. Статус "онлайн" определяется по недавней активности с приблизительной точностью, а не по факту реально открытой вкладки браузера.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний