开始接手祖传系统时发现用来存储session的redis服务里各个库都是空的,种种原因当时没有在意(心想难道有什么高超技术可以把存在redis里的session信息隐藏起来?不敢声张担心暴露我的无知),近期要搞上云迁移遂和运维的同事一起看了下原来的生产环境redis确实没有数据写入(运维同事:搞了主从的redis服务存了个寂寞?),于是决定一看究竟,临近下班加延迟半个多小时没找出原因,今天早上继续抽时间分析还是无果,全网也搜了个遍,一开始考虑是环境问题,但本地与线上都是同样的问题,按理说不应该,结果最后发现是大神在框架的index.php入口文件里先开启了 session_start()。什么鬼,这个操作损失我半天时间。
期间网上搜索类似问题看到有些网友遇到的与环境配置有关,如php.ini里的session.auto_start=1的情况需改为0,还有session.save_handler=files的情况说把配置改为user(此种情况我试了会报错),根据结果总结产生的可能原因有:
1.php.ini配置文件里的session.auto_start设为1了;
2.session_start()在你session_set_save_handler设置之前被调用了,这点很重要,否则怎么试都无用。
其实session.save_handle=files这个配置是不影响PHP的session_set_save_handler()函数的设置的。我的环境PHP版本:7.0.12。