Решил по мотивам этого топика сделать "счетчик" онлайн пользователей.
Таблица yiisession выглядит вот так:
CREATE TABLE IF NOT EXISTS `yiisession` (
`id` char(32) NOT NULL,
`expire` int(11) DEFAULT NULL,
`data` text,
`user_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Переопределил метод changeIdentity в WebUser, он выглядит так:
...
protected function changeIdentity($id,$name,$states)
{
parent::changeIdentity($id,$name, $states);
$sql = "UPDATE yiisession SET user_id=:user_id WHERE id=:id";
$command = Yii::app()->db->createCommand($sql);
$command->bindValue(':user_id', $id);
$command->bindValue(':id', Yii::app()->session->sessionId);
$command->execute();
}
...
И все вроде должно работать, но не работает. В user_id пишется NULL, ошибок никаких не появляется, в логах тишина. Если запрос выполнить вручную (в pma), то user_id меняется. Есть подозрение, что делаю апдейт не в том месте.
Жаль, что никто не сталкивался с подобной задачей. Единственное решение, которое я придумал, явно не лучшее, выполнять запрос с обновлением id пользователя в таблице сессий в контроллере site/index (который отрабатывает после входа).
Нашел еще один способ, описанный здесь. Суть в том, чтобы в таблице с пользователями создать дополнительное поле - время последней активности пользователя, и уже по этому полю считать количество пользователей онлайн. Этот способ, наверное, самый простой и эффективный. При этом сессии в базе хранить не нужно.
В принципе я уже сделал как написал в предыдущем топике. Но интересно (на будущее), что я делал не так при хранении сессий в БД. Покажи, пожалуйста, свой changeIdentity или поясни как ты делал. То что описано в топике не работает на Yii 1.1.6, а скорей всего и на более ранних версиях, топику более 2х лет.