之前写过一个使用数据库session的系统,也实现了在线T人的功能,然而今天的时候发现不能正常使用了,查看存放session的数据表,结果发现session根本没有写入到数据库中,明明之前可以使用的,甚是纠结,查看TP的代码发现了问题,下面给出解决方案。
解决方案
设置php.ini,将session.auto_start 设置为0,也就是禁用session自动开启,问题就得到解决了。
原因分析
打开ThinkPHP的.ThinkPHPCommonfunctions.php的这个文件,大概在1197行,找到函数function session($name=”,$value=”) 的实现,往下查看可以在1218行处看到如图所示的内容。
ThinkPHP中根据用户配置的SESSION_TYPE来创建对应的自定义的对话存储,如果我们设置了使用数据库session,在TP中也就是Db,这个时候就会创建..ThinkPHPLibraryThinkSessionDriverDb.class.php这货的对象,然后使用 session_set_save_handler设置相关的handler就可以实现自定义的对话存储了。但是!然而!如果在调用session_set_save_handler之前session已经开起了,那么这货就会返回false,也就是设置无效,而TP在这里并没有检测,所以在php.ini中如果设置了session.auto_start,那么自定义的对话存储将无效。
扫码领个红包作为打赏吧~~
(余额宝支付时可抵现)
赏
喜欢 (4)or分享 (0)
最后
以上就是斯文招牌最近收集整理的关于无效库(可能不是php库),ThinkPHP设置了数据库session,写入无效的问题的全部内容,更多相关无效库(可能不是php库),ThinkPHP设置了数据库session,写入无效内容请搜索靠谱客的其他文章。
发表评论 取消回复