2017-09-13 93 views
3

我在apache服務器2.4.16上使用PHP 5.5.38。在某段時間後(約25分鐘),我會遇到這個會話丟失的問題。我發現這些參數在php.ini文件約25分鐘後會話丟失

的session.gc_maxlifetime = 1440
session.gc_probability合= 10

但是這些代碼已經達到設定爲不同的值。代碼看起來像這樣

ini_set('session.gc_maxlifetime', 60*60*24*7); 
ini_set('session.use_cookies', 1); 
ini_set('session.gc_probability', 0); 

我確認他們返回舊值,這意味着它沒有失敗或什麼。

我不知道在哪裏可以找到失去會話的原因。任何想法或建議將不勝感激。

+0

你檢查你的htaccess文件?你有什麼喜歡'php_value session.gc_maxlifetime' – Thamaraiselvam

+0

是的,我也檢查了htaccess文件,沒有什麼。 – Shaonline

回答

1

當您設置與ini_set()一個配置價值,它只是當前腳本執行過程中持續:腳本的執行過程中

配置選項將保持這個新的價值,並在腳本的結尾恢復。

而且,當有多個值session.gc_maxlifetime,垃圾收集器會用最低:

如果不同的腳本具有不同的session.gc_maxlifetime數值但是共享了同一個地方存儲會話數據那麼具有最小值的腳本將清除數據。

所以你需要做的是要麼有ini_set()分配在每頁面在您使用會話,或者是更好的選擇,直接修改php.ini文件到您需要的值。

請注意,25分鐘大概是1440秒(24分鐘),所以它絕對使用php.ini的值。

+0

ini_set()賦值實際上用於每個頁面。如果它在每個頁面上都不應該保持這個新的價值? – Shaonline

+1

@Shaonline如果你有一個基於debian的系統,垃圾收集是通過一個每分鐘大概發生一次的cronjob完成的。此腳本(以及類似的實用程序腳本)將使用默認的php.ini值運行。 ishegg是正確的,你應該在主php.ini文件中設置這個設置,而不是在用戶域中的腳本。 – OptimusCrime

+0

@OptimusCrime說的一個(位)「hacky」解決方法是將'session.save_path'設置爲另一個目錄,以便cronjob無法通過'session_save_path()'獲得它。這當然不是理想的。是否可以直接在ini文件中更改值? – ishegg