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

pgpifvop  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(158)

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

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

我面临的问题很简单,但我似乎只找到丑陋的解决方案,因为会话在每个操作中都会更新,当我试图注销或登录(我在登录前执行 AJAX 调用以检查内容)时,applicacion崩溃,因为用户是访客,没有user->id
我可以做丑陋的解决方案,但我更了解它是如何工作的,或者如何以一种只在用户仍然登录时触发的方式实现。
谢谢你!

70gysomp

70gysomp1#

Yii::$app->user->id,行尝试加载用户标识,但如果用户未登录,则总是失败。只需检查用户是否为guest:

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

相关问题