我的登录与 PHP 会话完美配合。我尝试切换到 DbSession 引擎,但登录将不再起作用,因为页面重定向后会话为空。
这是工作流程:
- 用户输入他的用户 ID 并单击提交以发布数据
- 验证有效(我测试过),并使用密钥sess = XXXX 创建了一个新的身份 cookie(在重定向之前使用日志进行了测试)。
- $_SESSION 填充了用户数据(在重定向之前使用日志进行了测试)
- 该页面使用新的响应 cookie进行重定向。
- 密码页面加载并且请求 cookie 具有相同的 XXXX 值(在 chrome 开发人员工具中重定向 + 后使用日志进行测试)。
会话现在只包含
[__flash] => 数组 ( )
response cookie "sess" = request cookie "sess" = id in the session table,所以到处都是相同的密钥,但密码页面上的会话仍然是空的,90% 的时间(因为在某些随机情况下,会话仍然存在,但我无法按需复制它)
我已经检查了这些问题,不是同一个问题:
PHP session lost after redirect
Session lost after redirect in Codeigniter
有没有人见过类似的东西?我无法弄清楚是什么原因造成的。
附录:
会话配置
'session' => [
'class' => 'yii\web\DbSession',
'name' => 'sess',
'timeout' => 3600,
'db' => 'session_db',
'sessionTable' => 'session',
],
会话数据库配置
$config['components']['session_db'] = [
'class' => 'yii\db\Connection',
...
],
登录操作
// authenticate() Just checks if the user is valid, etc
Yii::$app->user->authenticate();
// login() just calls parent::login(), sets some session values then returns !$this->getIsGuest()
Yii::$app->user->login(Yii::$app->user);
更新!!我刚刚注意到,如果我使用相同的数据库而不是“db”(我的主数据库)而不是“session_db”,它可以完美地工作,即使两个表在 2 个数据库中具有完全相同的架构。