如何获取用户的 dbsession id 以及如何在 yii2 中使用过期值?
How to get user's dbsession id and how to work with expire value in yii2?
我使用 dbsession,我看到数据进入 mysql table,所以 dbsession 配置运行良好。
我需要了解用户是否在线。
我如何获取此用户会话 ID?
当我知道用户的会话 ID 时,我将从数据库中获取过期号。但是有一个整数值,这个值是什么意思呢?我如何将它与自己的时间进行比较?
使用这种方式,您将只能获得最近几分钟访问过您网站页面的用户列表。
是的,您可以将会话存储在您的数据库中 - 只需将数据库会话设置放入您的配置文件并创建适当的数据库 table。它在这里描述:
http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html
但是您必须更改会话 table 并使用您自己的 CustomDbSession class.
将 'user_id' 整数字段添加到会话 table 架构。
创建您的自定义 class,它将扩展 DbSession 并重写其 'writeSession' 方法 - 如果用户不是访客,请在其中添加保存 user_id。
接下来您需要 know/set 用户 authTimeout - 它位于配置->组件->用户部分。
现在我们可以获得访问我们网站的用户列表,例如,在过去 5 分钟内:
$expire = Yii::$app->user->authTimeout - 5*60;
(new Query())->select(['user_id'])
->from('session')
->where('[[expire]]>:expire', [':expire' => $expire])
->column();
Pavel Bariev 的正确答案的一个小补充:您不必扩展 DbSession class 来将其他字段保存到您的会话 table。只需通过配置设置 "writeCallback" 属性。例如:
'session'=>[
'class'=>'yii\web\DbSession',
'writeCallback'=>function($session)
{
return [
'user_id'=>Yii::$app->user->id,
];
}
],
我使用 dbsession,我看到数据进入 mysql table,所以 dbsession 配置运行良好。
我需要了解用户是否在线。 我如何获取此用户会话 ID?
当我知道用户的会话 ID 时,我将从数据库中获取过期号。但是有一个整数值,这个值是什么意思呢?我如何将它与自己的时间进行比较?
使用这种方式,您将只能获得最近几分钟访问过您网站页面的用户列表。
是的,您可以将会话存储在您的数据库中 - 只需将数据库会话设置放入您的配置文件并创建适当的数据库 table。它在这里描述: http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html 但是您必须更改会话 table 并使用您自己的 CustomDbSession class.
将 'user_id' 整数字段添加到会话 table 架构。
创建您的自定义 class,它将扩展 DbSession 并重写其 'writeSession' 方法 - 如果用户不是访客,请在其中添加保存 user_id。
接下来您需要 know/set 用户 authTimeout - 它位于配置->组件->用户部分。
现在我们可以获得访问我们网站的用户列表,例如,在过去 5 分钟内:
$expire = Yii::$app->user->authTimeout - 5*60;
(new Query())->select(['user_id'])
->from('session')
->where('[[expire]]>:expire', [':expire' => $expire])
->column();
Pavel Bariev 的正确答案的一个小补充:您不必扩展 DbSession class 来将其他字段保存到您的会话 table。只需通过配置设置 "writeCallback" 属性。例如:
'session'=>[
'class'=>'yii\web\DbSession',
'writeCallback'=>function($session)
{
return [
'user_id'=>Yii::$app->user->id,
];
}
],