一個關(guān)于session奇怪的BUG

  1. 環(huán)境如下:
    thinkphp + PHP5.4 + apache + mysql + linux/windows.

  2. bug描述如下:
    當(dāng)我頁面進(jìn)行登錄的時候,一開始登錄上去了,然后隔一段時間,突然間就又自動退出了,而且退出的session返回之前的狀態(tài),很難尋找究竟BUG出現(xiàn)在哪里。

  3. 解決過程如下:

  • 首先,和同事盡力地去重現(xiàn)這個BUG,但是發(fā)現(xiàn)這個BUG是不定時出現(xiàn)的,刷著刷著就出現(xiàn)了,很奇怪問題究竟出現(xiàn)在什么地方,于是就無限重復(fù)地嘗試重試BUG,總結(jié)了這個BUG的規(guī)律大概就是,隔一段時間,就自動刷新回以前的session。
  • 之后無限重讀了thinkphp的源碼,發(fā)現(xiàn)問題并不大,怎么思考都覺得沒有這方面的BUG。
  • 回憶了這幾天所做的修改,發(fā)現(xiàn)最大的就是把session存進(jìn)數(shù)據(jù)庫,還有就是新版頁面的輪詢。于是翻查了數(shù)據(jù)庫的東西,發(fā)現(xiàn)并沒有存在這些問題,無論如何都是在我打開登錄頁面,登錄之后,刷新回某個頁面發(fā)生的事情。
  • 在同事的提醒下,突然間明白了整個BUG的產(chǎn)生過程。
  1. BUG發(fā)生的原因解析:
  • 我在其他頁面使用了輪詢,這是一個單獨的線程,然而session的機(jī)制,當(dāng)我關(guān)閉這個線程的時候,PHP會將當(dāng)前session重新寫入,這樣就導(dǎo)致了,雖然我已經(jīng)登錄了,但是由于輪詢的那個線程關(guān)閉時間還沒到,當(dāng)時間一到,線程關(guān)閉,session被重新寫入,session被我無意中刪除!
  1. 解決方案:
  • 在輪詢的過程中,不需要寫入session的話,則session_write_close()
  • 當(dāng)你需要寫入session,再session_start()

這個BUG非常之無腦= =,兩個人合作查找了一兩個小時,不過問題最終還是解決完畢了。記錄一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,813評論 11 349
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 簡書の開始、后半段建議配上 《Summer》——久石讓 我 我是一名90后,學(xué)歷平平、技能平平、家庭條件平平。...
    手與刀閱讀 1,528評論 19 9
  • 成年人大多如貪婪的小獸 躲在黑暗里 窺探著別人的秘密 藏著自己的心事
    胖二代閱讀 285評論 0 0

友情鏈接更多精彩內(nèi)容