关于 session 未到设置的过期时间就过期的问题(分享坑点)

起因

将多个项目迁移到同一台服务器后,收到大佬们的反馈:明明登录上了,但是用着用着就突然间掉线了,又要重新登录,以前都没有这样的问题

排查过程

首先确认了项目里的session过期时间,都是设置为了一天,并且做了相对应的续命操作(有操作的话,会自动延长相对应的过期时间)
最后,检查服务器里的session文件,发现每过半个小时,就自动清除掉相对应的session文件了

结果

发现是其他项目里设置了过期时间为半个小时(坑死我也),然后导致每过半个小时,GC就有概率启动回收机制,清除掉了对应的session文件,导致用户掉线。
具体:GC在工作时,并不会区分不同站点的session。举例言之,项目A的gc_maxlifetime设置为2小时,站点B的 gc_maxlifetime设置为默认的半格小时。当项目B的GC启动时,它会扫描公用的临时文件目录,不管是项目A还是项目B里面session,只要是超过半个的session文件全部删除掉,
解决方案:找到问题所在,解决起来就很简单了。修改session.save_path参数,或者使用session_save_path()函数,把每个项目的session的目录指向一个专用的目录

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 1年前 自动加精
╰ゝSakura
讨论数量: 1

session存文件?我们都存Redis里

4年前 评论
╰ゝSakura (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!