2015-08-21 38 views
4

我們在cPanel LAMP共享託管服務器上有一個PHP應用程序(SilverStripe)。 CMS用戶每隔幾分鐘就會丟失一次會話。下面是基於phpinfo()託管平臺上的一些會話設置:僅僅幾分鐘後PHP會話超時

session.gc_maxlifetime = 0 
session.gc_divisor = 100 
session.gc_probability = 1 
session.save_handler = files 
session.save_path = /tmp 
session.cookie_lifetime = 0 

有一個在PHP代碼中沒有會話管理。事實上,SilverStripe CMS實際上每5分鐘就會對服務器進行一次ping操作,以保持會話的正常運行,但在此之前超時正在發生。

這是什麼原因造成的?

回答

0

它沒有出現在文檔中,但將session.gc_maxlifetime設置爲0意味着會話在瀏覽器關閉之前不會過期。

當然,這仍然不能解決與垃圾收集器做它自己的事情相關的問題。 最好的解決方案似乎仍然在改變session.save_path

1

查看php.ini爲session.gc_maxlifetime設置的值是以秒爲單位的ID生存期。

我相信,默認爲1440秒(24分鐘)

http://www.php.net/manual/en/session.configuration.php

編輯:正如一些評論所指出的,上面是不完全準確。爲什麼以及如何實現會話生命週期的一個很好的解釋可以在這裏找到:

1

內部案例CPANEL-12629可以解決/ scripts/clean_user_php_sessions的問題,在運行EasyApache 3的系統上總會刪除超過24分鐘的會話(儘管配置了自定義session.gc_maxlifetime值)。我將更新此主題,提供有關此案例狀態的更多信息。在此期間,臨時解決方法是編輯以下文件:

代碼:

/usr/local/cpanel/scripts/clean_user_php_sessions 
Within the file, change this entry: 

代碼:

其他{ 我的$迪爾斯=交友:: PHPINI :: get_directives([' session.save_path','session.max_lifetime'],1,'/ usr/local/lib'); clean_sessions($ dirs - > {'session.save_path'} {'value'},$ dirs - > {'sessions.max_lifetime'} {'value'}); }

return 1;

要:

代碼:

其他{ 我的$迪爾斯=交友:: PHPINI :: get_directives([ '的session.save_path', '的session.gc_maxlifetime'],1,「在/ usr/local/lib');清潔會話($ dirs - > {'session.save_path'} {'value'},$ dirs - > {'session。gc_maxlifetime'} {'value'}); }

return 1;

然後,排除的cPanel更新此文件使用以下命令:

代碼:

echo '/usr/local/cpanel/scripts/clean_user_php_sessions' >> /etc/cpanelsync.exclude 

記住編輯「/etc/cpanelsync.exclude」刪除這條線,一旦我們推出一個更新來解決這個問題。

來源: https://forums.cpanel.net/threads/php-session-timeout-since-64-0-update.598247/