一个关于Session奇怪的BUG

发表于:2016-6-02 11:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Kair    来源:51Testing软件测试网采编

  1、环境如下:
  thinkphp + PHP5.4 + apache + mysql + linux/windows.
  2、bug描述如下:
  当我页面进行登录的时候,一开始登录上去了,然后隔一段时间,突然间就又自动退出了,而且退出的session返回之前的状态,很难寻找究竟BUG出现在哪里。
  3、解决过程如下:
  首先,和同事尽力地去重现这个BUG,但是发现这个BUG是不定时出现的,刷着刷着就出现了,很奇怪问题究竟出现在什么地方,于是就无限重复地尝试重试BUG,总结了这个BUG的规律大概就是,隔一段时间,就自动刷新回以前的session。
  之后无限重读了thinkphp的源码,发现问题并不大,怎么思考都觉得没有这方面的BUG。
  回忆了这几天所做的修改,发现最大的就是把session存进数据库,还有就是新版页面的轮询。于是翻查了数据库的东西,发现并没有存在这些问题,无论如何都是在我打开登录页面,登录之后,刷新回某个页面发生的事情。
  在同事的提醒下,突然间明白了整个BUG的产生过程。
  4、BUG发生的原因解析:
  我在其他页面使用了轮询,这是一个单独的线程,然而session的机制,当我关闭这个线程的时候,PHP会将当前session重新写入,这样就导致了,虽然我已经登录了,但是由于轮询的那个线程关闭时间还没到,当时间一到,线程关闭,session被重新写入,session被我无意中删除!
  5、解决方案:
  在轮询的过程中,不需要写入session的话,则session_write_close()
  当你需要写入session,再session_start()
  这个BUG非常之无脑= =,两个人合作查找了一两个小时,不过问题最终还是解决完毕了。记录一下。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号