问题
本质上,我有一个Yii2 Web应用程序,要求所有用户登录。用户能够成功登录,但是被“随机地”从系统中注销。每天大约有50%的用户发生这种情况2-3次。
用户将在系统上处于活动状态,然后上载文件或保存表单,而不是成功完成操作,而是将用户带到登录屏幕,这意味着他们的会话已过期,需要再次登录。
注释
配置
Yii2配置(原始)
'session' => ['class' => 'yii\web\CacheSession'],
'cache' => ['class' => 'yii\caching\FileCache'],
'user' => [
'class' => 'app\models\YiiUser',
'identityClass' => 'app\models\User',
'enableAutoLogin' => false,
'enableSession' => true,
'authTimeout' => 1200, // 20 min (in seconds)
],
Yii2配置(更新的“缓存”)
'cache' => [
'class' => 'yii\redis\Cache',
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
]
],
PHP配置
session.save_handler = files
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
我真的很努力,所以任何指导,问题或建议都将不胜感激。即使只是一些建议,也可以在哪里添加一些日志记录。
答案 0 :(得分:1)
经过扩展测试,我能够通过快速刷新应用程序中的任何页面(使用FileCache设置)来始终如一地重现该问题。发生的事情是会话仍然存在,但是所有值(即我们的用户ID)都将被清除。因此可以找到会话,但会话为空。
然后,我与我们的用户取得了新的联系,他们了解自Redis更改以来他们从未遇到过此问题。我也无法使用Redis后端进行复制。最终,这更多的是沟通问题,对不起!
我认为我们最终是PHP会话锁定的受害者,如下所述:https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/