几分钟后 PHP 会话超时

Posted

技术标签:

【中文标题】几分钟后 PHP 会话超时【英文标题】:PHP session times out after only a few minutes 【发布时间】:2015-11-15 03:57:44 【问题描述】:

我们在 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 一次服务器以保持会话处于活动状态,但在此之前就发生了超时。

这是什么原因造成的?

【问题讨论】:

【参考方案1】:

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

当然,这仍然不能解决与垃圾收集器自行处理相关的问题。 最好的解决方案似乎仍然是更改 session.save_path

【讨论】:

【参考方案2】:

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

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

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

编辑:正如一些 cmets 指出的那样,上述内容并不完全准确。此处提供了有关为什么以及如何实现会话生命周期的精彩解释:

【讨论】:

【参考方案3】:

内部案例 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:

代码:

否则 我的 $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;

收件人:

代码:

否则 我的 $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/

【讨论】:

以上是关于几分钟后 PHP 会话超时的主要内容,如果未能解决你的问题,请参考以下文章

常规会话管理和常见超时

PHP 中的会话超时:最佳实践

PHP会话默认超时[重复]

PHP会话默认超时[重复]

春季/安全中的自定义会话超时

如何在 Laravel 中设置会话超时?