使用Yii2 DbSession登录和注销的数据库会话问题

时间:2019-07-26 13:51:44

标签: php session yii yii2

我正在尝试实现DbSession,正如here所述,我已经实现了两个自定义字段,如下所示:

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

我面临的问题很简单,但是我似乎只找到丑陋的解决方案,因为每次尝试注销或登录(登录前我都会用ajax调用检查内容)时,每次操作中的会话都会更新由于用户是访客而崩溃,仍然没有user->id

我可以做难看的解决方案,但是我更了解它的工作原理,或者如何以仅在用户仍然登录后才触发的方式实现。

谢谢!

1 个答案:

答案 0 :(得分:0)

Yii::$app->user->id,行尝试加载用户identity,如果用户未登录,该加载总是失败。只需检查用户是否为访客:

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