我的php.ini文件設置爲在24小時內過期。但是我的用戶在僅僅20分鐘左右就註銷後就抱怨了。在php會session_start()會搞亂我的用戶會話長度?
我在每一頁的開頭使用session_start。這可能會爲我搞砸嗎? 或者還有其他什麼可能導致這種情況?
剛剛意識到我可能會在共享主機上。它可能有一些垃圾收集會話的組設置。任何人都知道如何看待這個問題,或者讓我的問題更具體一些?
謝謝!
我的php.ini文件設置爲在24小時內過期。但是我的用戶在僅僅20分鐘左右就註銷後就抱怨了。在php會session_start()會搞亂我的用戶會話長度?
我在每一頁的開頭使用session_start。這可能會爲我搞砸嗎? 或者還有其他什麼可能導致這種情況?
剛剛意識到我可能會在共享主機上。它可能有一些垃圾收集會話的組設置。任何人都知道如何看待這個問題,或者讓我的問題更具體一些?
謝謝!
ini_set('session.gc_maxlifetime',28800); #28800 - just an example time - set your own
ini_set('session.gc_probability',1);
ini_set('session.gc_divisor',1);
session_save_path('/path to your sessions folder');
ob_start();
session_start();
您確實需要先創建一個會話文件夾。 這對GoDaddy共享主機肯定有效。 在VPS上你可以使用這個或只是更新你的php.ini文件。
@AR我更新了我的php.ini,並且出於某種原因,當我做phpinfo時,新的更改顯示出來,但我不知道爲什麼會話到期。 :( – GeekedOut
http://php.net/manual/en/session.configuration.php如果不同的腳本具有不同的session.gc_maxlifetime值,但共享存儲會話數據的相同位置,則具有最小值的腳本將被清除在這種情況下,請將此指令與session.save_path一起使用。是否可以這樣? –
@AR其他腳本可能具有的session.gc_maxlifetime值是什麼?順便說一句,理想情況下,我想保留所有設置配置,而不是代碼,但肯定會清理我的會話並將其設置爲零大小 – GeekedOut
檢查phpinfo()
看看設置真的是什麼。 PHP有多個.ini文件,它的設置可以在多個地方被覆蓋,所以你的會話會話可能不是實際生效的。 phpinfo的輸出將顯示「本地」這個現在是什麼效果設置。
除此之外,session_start()不會自己刪除會話,但它可能會觸發基於幾個gc_*
.ini設置的會話垃圾回收器運行。不過,這是一個概率性的事情,並且每次開始會話都不會發生。
另一種可能性是您的會話文件將進入某個系統的臨時目錄,PHP外部的某些內容正在以20分鐘的時間間隔清除該目錄。因此,請檢查session.save_path
的設置,看看是否有東西清理那個位置。
您必須在腳本的開頭使用session_start(),否則您將無法訪問會話數據。 – Kenneth
@Kenneth我在每個腳本的開頭使用session_start。 – GeekedOut
這是正確的,這就是你應該做的...... – Kenneth