2009-11-23 21 views
-1

究竟發生了什麼?

我不知道接下來所以我不明白session_set_save_handler()實際上如何工作。

+2

這個問題,正如措詞,是沒有意義的。你在問PHP如何實際超時嗎?默認超時時間有多長?或者,正如問題的主體所暗示的那樣,您是在問保存會話處理程序是如何工作的? 正如措辭,我不知道你會看到會話到期和可以附加到會話保存處理程序之間的關係。 – delfuego 2009-11-23 16:00:19

+0

@ delfuego,我問你所有提到的。 – Mask 2009-11-23 16:03:25

+0

然後你需要花一點時間在PHP會話參考中: http://www.php.net/manual/en/book.session.php 這應該回答你所有的問題。 – delfuego 2009-11-23 16:11:24

回答

1

會話超時在php.ini宣佈
如果你可以編輯php.ini,變化:
的session.gc_maxlifetime 72000
如果您不能編輯php.ini,把這個在您的.htaccess文件:
php_value session.gc_maxlifetime 72000
即使沒有任何活動,這應該允許會話「活」至少20小時(72,000秒)。

如果這不起作用,並且您在共享主機上,則可能是主機定期清空會話目錄。你的會議是否會在預先確定的時間內死亡? (即10分鐘?)如果是這種情況,可以使用自定義會話處理程序將會話移入數據庫。

+0

當沒有請求時會話超時發生,我想知道如果沒有請求時怎麼辦? – Mask 2009-11-23 16:13:41

+0

我仍然很困惑,你對會話超時問題的看法有什麼*與您詢問的有關會話保存處理程序的問題有關。 – delfuego 2009-11-23 16:49:20

0

大多數人會認爲session.gc_maxlifetime定義了會話的生存期。

但這並不完全正確。 session.gc_maxlifetime只是在PHP會話實現的垃圾回收器假定會話過期之後的生命週期。但垃圾收集器只能被調用1%(默認設置)。所以會話可能會被使用,儘管它已經過期了。

如果您自己實現會話超時機制並將其註冊到session_set_save_handler,那麼最好的辦法是使用會話超時機制。它應該測試當前會話是否仍然有效,如果過期則立即使其無效。

有關詳細信息,請參閱my response to How do I expire a PHP session after 30 minutes?