Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Yii2 DbSession登录和注销时出现数据库会话问题_Php_Session_Yii_Yii2 - Fatal编程技术网

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

Php 使用Yii2 DbSession登录和注销时出现数据库会话问题,php,session,yii,yii2,Php,Session,Yii,Yii2,我正在尝试实现,正如前面所解释的,我已经实现了两个自定义字段,如下所示: 'session' => [ 'class' => 'yii\web\DbSession', 'writeCallback' => function ($session) { return [ 'user_id' => Yii::$app->user->id, 'last_write' => time(

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

'session' => [
    'class' => 'yii\web\DbSession',
    'writeCallback' => function ($session) {
        return [
            'user_id' => Yii::$app->user->id,
            'last_write' => time(),
        ];
    },
],
我面临的问题很简单,但我似乎只能找到难看的解决方案,因为会话在每次操作中都会更新,当我尝试注销或登录时(我在登录前调用ajax检查情况),应用程序崩溃,因为用户是来宾,没有
用户->id

我可以做难看的解决方案,但我相当了解它是如何工作的,或者如何以一种只有在用户仍然登录时才会触发的方式实现


谢谢

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

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

这不会改变任何事情,因为如果用户是来宾,
Yii::$app->user->id
将返回
null
。我已经知道,正如我所解释的,这是一个丑陋的解决方案,因为数据库更新时
会话->user\u id
为null。我正在试图找到如何防止在登录前和注销后触发此操作。错误消息到底是什么?@lubosdz正如我所说的,由于用户是来宾,没有用户,也没有id,所以它崩溃了。你说的“它崩溃”是什么意思?错误消息可能会有帮助。@rob006 Im不在我的计算机上,但这是访问不存在的对象属性的典型错误,
Yii::$app->user
为空/未定义
Yii::$app->user->id
崩溃(我认为消息或多或少是:尝试获取非对象的属性)。但我的意思是,它并不重要,我知道错误是什么,为什么会发生,或者如何以一种不好的方式解决它,我试图在这里存档的是以一种正确的方式配置,只在它登录时触发。
Yii:::$app->user
应该可用,无论用户是否登录。如果您遇到这样的错误,您将遇到鸡蛋问题(
writeCallback
user
组件完全初始化之前被调用)。