Метод User::IsOnLine не работает

Метод User::IsOnLine не работает

Решение проблемы оказалось довольно простым:
перед каждой загрузкой страницы задавать дату/время последней активности пользователя. На помощь нам пришел метод
CUser::SetLastActivityDate .

Зарегистрируем обработчик события  OnBeforeProlog
use Bitrix\Main\EventManager;
$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeProlog', 'setUserLastActivityDate');

Создадим сам обработчик - функцию setUserLastActivityDate() :
/**
 * @global $USER ;
 * @return void
 */
function setUserLastActivityDate() {
    if (!Loader::includeModule('socialnetwork')) {
        return;
    }
    global $USER;
    if ($USER->IsAuthorized()) {
        CUser::SetLastActivityDate($USER->GetID());
    }
} 

После чего вызываем метод IsOnline снова и видим, что теперь он работает как и задумано:
global $USER;
var_dump($USER->isOnline($USER->GetID()));
//на экране видим: true


P.S.
Если Вам не хочется разбираться, просто добавьте в файл /sitename/local/php_interface/init.php следующий код:

use Bitrix\Main\EventManager;
use Bitrix\Main\Loader;

$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeProlog', 'setUserLastActivityDate');

/**
 * @global $USER
 * @return void
 */
function setUserLastActivityDate() {

    if (!Loader::includeModule('socialnetwork')) {

        return;
    }
    global $USER;
    if ($USER->IsAuthorized()) {
        CUser::SetLastActivityDate($USER->GetID());
    }
}




Рейтинг

Возврат к списку

Раздел Bitrix
(Codeblog)