關於 session 未到設定的過期時間就過期的問題(分享坑點)

╰ゝSakura發表於2019-10-29

將多個專案遷移到同一臺伺服器後,收到大佬們的反饋:明明登入上了,但是用著用著就突然間掉線了,又要重新登入,以前都沒有這樣的問題

首先確認了專案裡的session過期時間,都是設定為了一天,並且做了相對應的續命操作(有操作的話,會自動延長相對應的過期時間)
最後,檢查伺服器裡的session檔案,發現每過半個小時,就自動清除掉相對應的session檔案了

發現是其他專案裡設定了過期時間為半個小時(坑死我也),然後導致每過半個小時,GC就有概率啟動回收機制,清除掉了對應的session檔案,導致使用者掉線。
具體:GC在工作時,並不會區分不同站點的session。舉例言之,專案A的gc_maxlifetime設定為2小時,站點B的 gc_maxlifetime設定為預設的半格小時。當專案B的GC啟動時,它會掃描公用的臨時檔案目錄,不管是專案A還是專案B裡面session,只要是超過半個的session檔案全部刪除掉,
解決方案:找到問題所在,解決起來就很簡單了。修改session.save_path引數,或者使用session_save_path()函式,把每個專案的session的目錄指向一個專用的目錄

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章