我使用dbsession并将数据显示到mysql表中,因此dbsession配置工作正常。
我需要了解用户是否在线。 如何获取此用户会话ID?
当我知道用户的会话ID时,我将从数据库中获取过期号码。但是有整数值,这个值意味着什么?我如何将它与自己的时间进行比较?
答案 0 :(得分:4)
Pavel Bariev正确答案的一小部分内容:您不必扩展DbSession类以将其他字段保存到会话表中。只需通过配置设置“writeCallback”属性即可。例如:
'session'=>[
'class'=>'yii\web\DbSession',
'writeCallback'=>function($session)
{
return [
'user_id'=>Yii::$app->user->id,
];
}
],
答案 1 :(得分:1)
使用这种方式,您只能获得在过去几分钟内访问过您网站页面的用户列表。
是的,您可以在数据库中存储会话 - 只需将db会话设置放在配置文件中并创建正确的数据库表。它在这里描述: http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html 但您必须更改会话表并使用自己的CustomDbSession类。
添加' user_id'整数字段到会话表模式。
创建自定义类,它将扩展DbSession并重写其“writeSession”#39;方法 - 如果用户不是访客,则在此处添加保存user_id。
接下来你想知道/设置用户authTimeout - 它在config-> components->用户部分。
现在我们可以获取访问我们网站的用户列表,例如,在过去5分钟内:
$expire = Yii::$app->user->authTimeout - 5*60;
(new Query())->select(['user_id'])
->from('session')
->where('[[expire]]>:expire', [':expire' => $expire])
->column();