如何配置 PHP 以自动定期删除会话数据/sess_ 文件?

How to configure PHP for automatical regular removing of session data / sess_ files?

PHP 会话数据存储在服务器端的 sess_{$hash} 文件中,该文件位于 php.inisession.save_path 设置中定义的目录中。

如果我的理解是正确的,这些文件应该在定义的时间段后被删除。这个时间如何获取和设置?我尝试了设置 session.cache_expiresession.gc_maxlifetime。例如。我将 session.cache_expire 设置为 2(分钟),但两分钟后文件仍然存在。我还将 session.gc_maxlifetime 设置为 120 (秒)。但这也没有用。

如何配置 PHP 以在定义的时间段后删除 sess_* 个文件?

session.gc_maxlifetime 定义了何时将会话数据标记为垃圾回收(不一定是在删除时)。该数据的实际删除取决于许多变量。最突出的是 session.gc_probabilitysession.gc_divisor概率超过除数决定会话初始化过程调用垃圾收集器清理标记垃圾的机会。默认情况下,它们分别是 1100意味着垃圾收集器有 1% 的机会清理)。

这是 PHP 会话数据垃圾收集的默认机制。但是,在某些系统上(最值得注意的是 Ubuntu),默认会话 GC 被外部清理机制取代,该机制实现为定期运行以清理会话文件的 cron 作业基于统计调用和 session.gc_maxlifetime.

在繁忙的站点上,您往往不会注意到这些副作用,随着 session_start() 调用次数的增加,定期清理陈旧会话数据的可能性也会增加。但是,在低流量站点(即您的开发环境)上,这种可能性会显着下降,以至于您可能会注意到陈旧的会话数据会在一段时间内徘徊。这通常不是什么值得关注的事情。只要您删除会话 cookie 并在需要删除会话时定期使用 session_destroy(),这一切都没有实际意义。