总有人间一两风,填我十万八千梦

ThinkPHP设置了数据库session,写入无效的问题

PHP Zero、J 4627℃ 0评论

之前写过一个使用数据库session的系统,也实现了在线T人的功能,然而今天的时候发现不能正常使用了,查看存放session的数据表,结果发现session根本没有写入到数据库中,明明之前可以使用的,甚是纠结,查看TP的代码发现了问题,下面给出解决方案。

解决方案

设置php.ini,将session.auto_start 设置为0,也就是禁用session自动开启,问题就得到解决了。

原因分析

打开ThinkPHP的.\ThinkPHP\Common\functions.php的这个文件,大概在1197行,找到函数function session($name=”,$value=”) 的实现,往下查看可以在1218行处看到如图所示的内容。

ThinkPHP session

ThinkPHP中根据用户配置的SESSION_TYPE来创建对应的自定义的对话存储,如果我们设置了使用数据库session,在TP中也就是Db,这个时候就会创建..\ThinkPHP\Library\Think\Session\Driver\Db.class.php这货的对象,然后使用 session_set_save_handler设置相关的handler就可以实现自定义的对话存储了。但是!然而!如果在调用session_set_save_handler之前session已经开起了,那么这货就会返回false,也就是设置无效,而TP在这里并没有检测,所以在php.ini中如果设置了session.auto_start那么自定义的对话存储将无效。

有关更详细的session_set_save_handler请参见http://php.net/manual/zh/function.session-set-save-handler.php

转载请注明:悠然品鉴 » ThinkPHP设置了数据库session,写入无效的问题

喜欢 (4)or分享 (0)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 谢谢分享。
    泉州OA2016-05-12 11:48 回复