Здравствуйте.
Скажите, можно ли средствами Битрикса определить, находится ли зарегистрированный посетитель сайта он-лайн?
Скажите, можно ли средствами Битрикса определить, находится ли зарегистрированный посетитель сайта он-лайн?
|
Здравствуйте.
Скажите, можно ли средствами Битрикса определить, находится ли зарегистрированный посетитель сайта он-лайн? |
|
|
|
|
|
Есть метод CUser::IsOnLine($id, $interval=120)
для определения статуса "Сейчас на сайте" по ID пользователя. |
|
|
|
|
|
Сделал так:
в \bitrix\php_interface\init.php написал AddEventHandler("main", "OnBeforeProlog", "MyUserOnline"); function MyUserOnline() { if($GLOBALS["USER"]->IsAuthorized()) CUser::SetLastActivityDate($GLOBALS["USER"]->GetID()); } И вывел список пользователей онлайн для проверки, там, где собирался выводить данные о том, активен сейчас пользователь или нет $by = "s_last_date"; $order = "desc"; $db = CUser::GetList($by, $order, array("LAST_ACTIVITY"=>120)); while($dba = $db->Fetch()) { echo $dba['ID']."<br>"; } |
|
|
|
|
|
В результате ничего не вывелось, хотя пользователи онлайн на тот момент были
|
|
|
|
|
|
Вы все правильно сделали, и если были авторизовавшиеся пользователи, то дата их активности должна была обновиться. Проверил у себя ваш код - все работает.
|
|
|
|
|
|
А если у пользователя страница откры, но он не проявлял активности больше 2х минут, то не отобразится, что пользователь онлайн?
|
|
|
|
|
|
В http нет такого понятия, как "онлайн", поскольку он не подразумевает поддержание соединения вообще. Просто считается, что пользователь "онлайн", если последний запрос страницы был не позднее N минут назад. Если хотите поддерживать статус "онлайн" все время, пока открыт браузер - то запрашивайте какую-нибудь мини-страницу с битриксом через ajax по таймеру, чтобы "освежить" сессию.
Экс-битриксоид.
Компонент (и.с.) - существительное мужского рода (ГОСТ 34.003-90). |
|
|
|
|
|
А как же жизнь сессии? Если она не ограничена по времени и существует, значит пользователь онлайн?
|
|
|
|
|
|
Жизнь сессии (срок установки cookie) - это сколько времени должно пройти, чтобы пользователю пришлось заново авторизоваться на сайте. Это сделано для исключения доступа к сайту человека, который может воспользоваться этим же компьютером позднее. Это время может быть неограниченным для удобства, но это не значит, что пользователь "онлайн", т.е. использует сайт или следит за "процессом".
Экс-битриксоид.
Компонент (и.с.) - существительное мужского рода (ГОСТ 34.003-90). |
|
|
|
|
|
Понял, спасибо
|
|
|
|
|
|
В поле "LAST_ACTIVITY" значения проставляет модуль соц. сети, если его у вас нет то соответственно это поле пустое для всех. В этом случае можно сделать свое событие которое бы на каждый клик обновляло значение данного поля у зарегистрированных пользователей
|
|
|
|
|
|
вы про это?
|
|
|
|
|
|
|||||
|
|
|
|
Андрей, описал пример решения вашей задачи в блоге:
|
|
|
|
|
|
Sergey Leshchenko, Спасибо вам большое, хороший вы человек
Работает ваше решение прям как хотелось! |
||||
|
|
|
|||