首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2 CacheSession“随机”销毁

Yii2 CacheSession“随机”销毁
EN

Stack Overflow用户
提问于 2019-02-19 21:06:55
回答 1查看 298关注 0票数 0

问题

本质上,我有一个需要所有用户登录的Yii2 web应用程序。用户可以成功登录,但“随机”被注销出系统。对于大约50%的用户来说,这种情况每天发生2-3次。

用户将在系统上处于活动状态,然后上传文件或保存表单,而不是成功地完成操作,而是将用户带到登录屏幕,这意味着他们的会话过期了,他们需要再次登录。

Notes

  • 我最初的配置在会话中使用了FileCache。为了解决这个问题,我实现了一个Redis缓存,但是问题仍然存在。
  • 有一些javascript代码是用来在用户的会话到期后自动注销的,但是首先给出警告,并且在这些实例中没有执行此代码。

Configuration

Yii2 Config (原件)

代码语言:javascript
复制
'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 (更新的“缓存”)

代码语言:javascript
复制
'cache' => [
        'class' => 'yii\redis\Cache',  
        'redis' => [
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 0,
        ]
    ],
代码语言:javascript
复制
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

我真的很挣扎,所以任何的指导、问题或建议都会受到极大的感谢。即使只是一些建议,在哪里添加一些日志将是有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2019-02-20 22:17:49

经过扩展测试后,我能够通过快速刷新应用程序中的任何页面(使用FileCache设置)来持续地重新创建这个问题。正在发生的事情是会话仍然存在,但是所有的值(即我们的用户id)都将被清除。所以可以找到会话,但它是空的。

然后,我再次联系了我们的用户,让他们重新认识到,自从Redis改变之后,他们还没有经历过这个问题。我也无法用Redis后端复制。最终,这是一个更多的沟通问题,而不是任何其他-对不起!

我认为我们最终是PHP会话锁定的受害者,如下所述:https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54774925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档