一个关于session奇怪的BUG

  1. 环境如下:
    thinkphp + PHP5.4 + apache + mysql + linux/windows.

  2. bug描述如下:
    当我页面进行登录的时候,一开始登录上去了,然后隔一段时间,突然间就又自动退出了,而且退出的session返回之前的状态,很难寻找究竟BUG出现在哪里。

  3. 解决过程如下:

  • 首先,和同事尽力地去重现这个BUG,但是发现这个BUG是不定时出现的,刷着刷着就出现了,很奇怪问题究竟出现在什么地方,于是就无限重复地尝试重试BUG,总结了这个BUG的规律大概就是,隔一段时间,就自动刷新回以前的session。
  • 之后无限重读了thinkphp的源码,发现问题并不大,怎么思考都觉得没有这方面的BUG。
  • 回忆了这几天所做的修改,发现最大的就是把session存进数据库,还有就是新版页面的轮询。于是翻查了数据库的东西,发现并没有存在这些问题,无论如何都是在我打开登录页面,登录之后,刷新回某个页面发生的事情。
  • 在同事的提醒下,突然间明白了整个BUG的产生过程。
  1. BUG发生的原因解析:
  • 我在其他页面使用了轮询,这是一个单独的线程,然而session的机制,当我关闭这个线程的时候,PHP会将当前session重新写入,这样就导致了,虽然我已经登录了,但是由于轮询的那个线程关闭时间还没到,当时间一到,线程关闭,session被重新写入,session被我无意中删除!
  1. 解决方案:
  • 在轮询的过程中,不需要写入session的话,则session_write_close()
  • 当你需要写入session,再session_start()

这个BUG非常之无脑= =,两个人合作查找了一两个小时,不过问题最终还是解决完毕了。记录一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,494评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,093评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,073评论 19 139
  • 简书の开始、后半段建议配上 《Summer》——久石让 我 我是一名90后,学历平平、技能平平、家庭条件平平。...
    手与刀阅读 5,321评论 19 9
  • 成年人大多如贪婪的小兽 躲在黑暗里 窥探着别人的秘密 藏着自己的心事
    胖二代阅读 1,774评论 0 0

友情链接更多精彩内容