为什么 PHP 忽略 session.gc_maxlifetime?

为什么 PHP 忽略 session.gc_maxlifetime?

我们已经建立了基于 WAMP 的服务器,php.ini设置如下:

session.gc_maxlifetime = 60*60*12
session.save_path = "d:/wamp/tmp"

我们面临的问题是tmp文件夹中的会话文件偶尔会被删除,而我们不知道原因。会话持续时间从 10 分钟到 40 分钟不等,而它们应该持续 12 小时。

虚拟主机环境,但我们在这些网站中使用的代码都不会覆盖此设置(使用ini_set、apache 配置 PHP 值或其他方式),因此我们不明白为什么会删除它们。也没有计划任务删除这些文件。

有没有办法成功找出为什么 gc_maxlifetime 被忽略?为了记录在案,我将我们的一个站点更改为session_save_path('D:/wamp/tmptmp');临时使用,只是为了仔细检查它是否是垃圾收集,并且会话文件保持在那里不变 - 尽管不可否认这并没有提供更多线索。

答案1

session.gc_maxlifetime 的配置将决定数据在多长时间后被确定为垃圾。在此之后,会话数据可能会在“垃圾收集”发生时被删除。但这并不能阻止您的会话变量因其他原因被删除的可能性。

查看 Gumbo 的答案这里他/她说“最好的解决方案是自行实现会话超时”。

答案2

尝试对某个项目进行集群时遇到了同样的问题。

我发现问题是由以下原因引起的:

/**
session_regenerate_id(true);

**/

尝试从代码中删除它或将参数设置为 false。

相关内容