2011-06-24 61 views
2

我的php.ini文件設置爲在24小時內過期。但是我的用戶在僅僅20分鐘左右就註銷後就抱怨了。在php會session_start()會搞亂我的用戶會話長度?

我在每一頁的開頭使用session_start。這可能會爲我搞砸嗎? 或者還有其他什麼可能導致這種情況?

剛剛意識到我可能會在共享主機上。它可能有一些垃圾收集會話的組設置。任何人都知道如何看待這個問題,或者讓我的問題更具體一些?

謝謝!

+0

您必須在腳本的開頭使用session_start(),否則您將無法訪問會話數據。 – Kenneth

+0

@Kenneth我在每個腳本的開頭使用session_start。 – GeekedOut

+0

這是正確的,這就是你應該做的...... – Kenneth

回答

1
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文件。

+0

@AR我更新了我的php.ini,並且出於某種原因,當我做phpinfo時,新的更改顯示出來,但我不知道爲什麼會話到期。 :( – GeekedOut

+0

http://php.net/manual/en/session.configuration.php如果不同的腳本具有不同的session.gc_maxlifetime值,但共享存儲會話數據的相同位置,則具有最小值的腳本將被清除在這種情況下,請將此指令與session.save_path一起使用。是否可以這樣? –

+0

@AR其他腳本可能具有的session.gc_maxlifetime值是什麼?順便說一句,理想情況下,我想保留所有設置配置,而不是代碼,但肯定會清理我的會話並將其設置爲零大小 – GeekedOut

2

檢查phpinfo()看看設置真的是什麼。 PHP有多個.ini文件,它的設置可以在多個地方被覆蓋,所以你的會話會話可能不是實際生效的。 phpinfo的輸出將顯示「本地」這個現在是什麼效果設置。

除此之外,session_start()不會自己刪除會話,但它可能會觸發基於幾個gc_* .ini設置的會話垃圾回收器運行。不過,這是一個概率性的事情,並且每次開始會話都不會發生。

另一種可能性是您的會話文件將進入某個系統的臨時目錄,PHP外部的某些內容正在以20分鐘的時間間隔清除該目錄。因此,請檢查session.save_path的設置,看看是否有東西清理那個位置。

+0

@Marc是啊我想因爲我在共享主機方案,我可能會分享會話GC配置。你知道如何設定我的獨特嗎? – GeekedOut

+0

其實我不是共享主機。我在VPS – GeekedOut

+0

我有session.gc_maxlifetime = 200000,但很明顯,我的應用程序聽不到:) – GeekedOut