几分钟后 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 会话超时的主要内容,如果未能解决你的问题,请参考以下文章