2011-08-01 240 views
4

我有一些關於php會話超時的問題。我在應用程序運行時設置了以下值:php會話超時

session.gc_maxlifetime = 3600 
session.cookie_lifetime = 3600 
session.save_path = myApplicationPath/tmp 
session.use_cookies = 1 
session.use_only_cookies = 1 

但是,我的會話在大約30分鐘內一直到期。另外,我的tmp目錄仍然是空的,所以看起來沒有實際上正在設置cookie。回聲ini_get(「session.save_path」)確實返回正確的路徑。

+1

只是爲了檢查:確保你在你打電話'session_start'之前設置的ini值。此外,還可以將'phpinfo()'的輸出與放置到測試文件中的輸出進行比較。 – hakre

+0

的值確實是在session_start之前設置的。 phpinfo指出:本地值var/www/myproject/tmp主值/ etc/lib/php5。會話文件仍然寫入主值。 – eelco

+0

找到了!使用Zend_Session,您不會收到有關在其他地方啓動的會話的通知。當我停止使用Zend_Session時,我收到了通知。把我的代碼放在bootstrap中解決了這個問題。 – eelco

回答

1

我想說的是PHP無法找到您save_path或沒有權限上寫的,所以它存儲在默認的共享目錄會話文件(餅乾)(所以用最短gc_maxlifetime網站將刪除會議來自所有其他網站)。

+0

這也是我自己的猜測。 save_path的輸出爲我提供了正確的路徑,並且該目錄有777個權限。 – eelco

+0

會話文件確實寫入默認目錄。我在這裏錯過了什麼? – eelco

+0

'session.save_path = myApplicationPath/tmp':你的真實路徑實際上不是以斜槓開始的嗎? –

2

注:

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

​​

+0

該OP有相反的描述相反的行爲:會話不會過期到30分鐘,儘管* session.gc \ _maxlifetime *狀態6分鐘。 – Gumbo

+0

AFAIU'session.gc_maxlifetime'是1小時,會話在他們應該做之前就死了 – RiaD

+0

哦,哇,對不起,這是我的錯。不知道我怎麼會把3600秒誤解爲6分鐘而不是60分鐘。 ;) – Gumbo