2009-09-29 149 views
2

這個問題一直讓我瘋狂。在兩個單獨的項目中(兩者都使用PEAR作爲庫,但是使用完全不同的自定義框架編寫),我使用PEAR Auth進行使用會話的身份驗證。PHP PEAR驗證會話超時

登錄後,用戶在空閒一小時左右內即可退出登錄。我沒有確切的時間,但很短。

我試過以下沒有成功。所有試圖將會議延長到一天,只是爲了指出這一點。

<?php 
// Tried built-in methods to extend the idle time, called after Auth is initialised 
$auth->setIdle(86400); 

// Tried increasing the sesion timeout (before auth is called) 
ini_set('session.gc_maxlifetime', 86400); 

// Tried increasing the cookie timeout (where the phpsession is held, before auth is called) 
session_set_cookie_params(86400); 

// Tried all of the above 
?> 

有沒有其他人有這個問題?如果是這樣,是否有可能延長空閒時間?

我正要準備好PEAR並寫我自己的基於cookie的認證類,但我沒有時間。

回答

2

我沒有遇到這個問題,到目前爲止,但我看你似乎沒有已經覆蓋但兩個可能的原因:

  1. 您可以檢查AUTH類的setExpire()方法除了SETIDLE( )。
  2. 可能有其他基於php的應用程序/腳本在同一臺服務器上運行,使用相同的會話存儲目錄並且超時時間較短。按照session.gc_maxlifetime docs:

    如果不同的腳本具有不同的session.gc_maxlifetime 值,但 共享同一個地方存儲 會話數據,則腳本使用 最小值將被清洗 數據。在這種情況下,一起使用此指令 與session.save_path.

+0

謝謝!我會試試這些,並讓你知道它是如何發生的。 – teaforchris 2009-09-30 10:50:57

+0

按照建議嘗試了setExpire()以及setIdle(),但這似乎沒有任何區別。 服務器是雲服務器,所以我不完全確定會話是如何存儲的 - 這可能會受到其他腳本的干擾。 你認爲使用不同的session.save_path爲有問題的Web應用程序會有幫助嗎? – teaforchris 2009-10-01 09:11:54

+0

是的,你應該嘗試一下。如果它是雲服務器,那麼運行更多的php應用的可能性很高,所以這可能是罪魁禍首。如果路徑未指定,它默認在* nix服務器上的'/ tmp',因此將其設置爲'/ tmp/[yourAppName]'(或更好地'/ tmp/[hash of yourAppName]')可能會解決你的問題(至少它會排除另一個可能的原因;) – 2009-10-01 09:47:12