如何获取用户的dbsession id以及如何使用yii2中的expire值?

时间:2015-03-30 17:22:17

标签: php yii yii2

我使用dbsession并将数据显示到mysql表中,因此dbsession配置工作正常。

我需要了解用户是否在线。 如何获取此用户会话ID?

当我知道用户的会话ID时,我将从数据库中获取过期号码。但是有整数值,这个值意味着什么?我如何将它与自己的时间进行比较?

2 个答案:

答案 0 :(得分:4)

Pavel Bariev正确答案的一小部分内容:您不必扩展DbSession类以将其他字段保存到会话表中。只需通过配置设置“writeCallback”属性即可。例如:

'session'=>[
    'class'=>'yii\web\DbSession',
    'writeCallback'=>function($session)
    {
        return [
            'user_id'=>Yii::$app->user->id,
        ];
    }
],

答案 1 :(得分:1)

使用这种方式,您只能获得在过去几分钟内访问过您网站页面的用户列表。

  1. 是的,您可以在数据库中存储会话 - 只需将db会话设置放在配置文件中并创建正确的数据库表。它在这里描述: http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html 但您必须更改会话表并使用自己的CustomDbSession类。

  2. 添加' user_id'整数字段到会话表模式。

  3. 创建自定义类,它将扩展DbSession并重写其“writeSession”#39;方法 - 如果用户不是访客,则在此处添加保存user_id。

  4. 接下来你想知道/设置用户authTimeout - 它在config-> components->用户部分。

  5. 现在我们可以获取访问我们网站的用户列表,例如,在过去5分钟内:

    $expire = Yii::$app->user->authTimeout - 5*60;
    (new Query())->select(['user_id'])
                ->from('session')
                ->where('[[expire]]>:expire', [':expire' => $expire])
                ->column();