问题
本质上,我有一个需要所有用户登录的Yii2 web应用程序。用户可以成功登录,但“随机”被注销出系统。对于大约50%的用户来说,这种情况每天发生2-3次。
用户将在系统上处于活动状态,然后上传文件或保存表单,而不是成功地完成操作,而是将用户带到登录屏幕,这意味着他们的会话过期了,他们需要再次登录。
Notes
Configuration
Yii2 Config (原件)
'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 Config (更新的“缓存”)
'cache' => [
'class' => 'yii\redis\Cache',
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
]
],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我真的很挣扎,所以任何的指导、问题或建议都会受到极大的感谢。即使只是一些建议,在哪里添加一些日志将是有帮助的。
发布于 2019-02-20 22:17:49
经过扩展测试后,我能够通过快速刷新应用程序中的任何页面(使用FileCache设置)来持续地重新创建这个问题。正在发生的事情是会话仍然存在,但是所有的值(即我们的用户id)都将被清除。所以可以找到会话,但它是空的。
然后,我再次联系了我们的用户,让他们重新认识到,自从Redis改变之后,他们还没有经历过这个问题。我也无法用Redis后端复制。最终,这是一个更多的沟通问题,而不是任何其他-对不起!
我认为我们最终是PHP会话锁定的受害者,如下所述:https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/
https://stackoverflow.com/questions/54774925
复制相似问题