PHP会话仅在几分钟后就会超时

时间:2015-08-21 09:00:35

标签: php cpanel session-timeout silverstripe whm

我们在cPanel LAMP共享托管服务器上有一个PHP应用程序(SilverStripe)。 CMS用户每隔几分钟就会丢失一次会话。以下是托管平台上基于phpinfo()的一些会话设置:

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操作,以使会话保持活动状态,但在此之前就会发生超时。

是什么导致这种情况?

3 个答案:

答案 0 :(得分:1)

查看php.ini,为session.gc_maxlifetime设置的值是以秒为单位的ID生存期。

我相信默认值是1440秒(24分钟)

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

编辑:正如一些评论指出的那样,上述内容并不完全准确。这里有一个关于为什么以及如何实现会话生存期的精彩解释:

答案 1 :(得分: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:

代码:

其他{     my $ dirs = Cpanel :: 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'}); }

返回1;

要:

代码:

其他{     my $ dirs = Cpanel :: PHPINI :: get_directives(['session.save_path','session.gc_maxlifetime'],1,'/ usr / local / lib');     clean_sessions($ dirs-> {'session.save_path'} {'value'},$ dirs-> {'session.gc_maxlifetime'} {'value'}); }

返回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/

答案 2 :(得分:0)

它没有出现在文档中,但将session.gc_maxlifetime设置为0表示会话在浏览器关闭之前不会过期。

当然,这仍然无法解决与垃圾收集器相关的问题。 最好的解决方案似乎仍在改变session.save_path