Хочу сделать показ блока консультантов он-лайн, но только тех, которые авторизовались и сейчас на сайте.
Использую CDbHttpSession компонент.
Данные о залогиненом пользователе так понял хранятся в поле data в таблице sessions, но там всё сериализовано, даже не знаю как сделать грамотную выборку.
У себя сделал только вывод зарегенных пользователей, безо всяких модификаций таблицы сессий:
для WebUser
в changeIdentity
$sessionId = md5(Yii::app()->session->sessionId);
$sql = "DELETE FROM UsersOnline WHERE sessionId='$sessionId'";
Yii::app()->db->createCommand($sql)->execute();
$sql = "INSERT INTO UsersOnline (sessionId, userName, userGender, userId)
select '$sessionId', name, gender, id FROM Member WHERE id=$id";
Yii::app()->db->createCommand($sql)->execute();
$sql = "UPDATE Member SET lastVisit = UNIX_TIMESTAMP() WHERE id=$id";
Yii::app()->db->createCommand($sql)->execute();
в logout
$sessionId = md5(Yii::app()->session->sessionId);
$sql = "DELETE FROM UsersOnline WHERE sessionId='$sessionId'";
Yii::app()->db->createCommand($sql)->execute();
Затем в layout, добавляем Portlet с кэшированием на минуту, который получает залогиненных пользователей запросиком select distinct * from UsersOnline.
Плюс, элементарно добавить пользователю флажок "недобавлять к списку активных пользователей"(напр админа или партизанов) в модель юзера и подправить запросик в changeIdentity.