为什么 Debian 使用 cron 作业清理 php 会话而不是使用 php 的内置垃圾收集器?

为什么 Debian 使用 cron 作业清理 php 会话而不是使用 php 的内置垃圾收集器?

Debian 及其衍生产品(Ubuntu)不使用 php 会话垃圾收集器

session.gc_probability = 0

相反,他们使用 cron /etc/cron.d/php5

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

为什么 Debian 选择这样做?

答案1

因为 Debian 设置了非常严格的权限/var/lib/php5(1733,所有者 root,组 root)以防止 PHP 会话劫持。不幸的是,这也阻止了本机 PHP 会话垃圾收集器工作,因为它无法在那里看到会话文件。cron 作业以 root 身份运行,它确实有足够的权限查看和清理会话文件。

编辑:支持文件:该行为是为了响应错误 #267720(以前在 stockphp.ini文件中有关于此问题的评论,但现在在我基于 wheezy 的 PHP 安装中却看不到它们了。)

答案2

在流量较低的网站上,它可能会更可靠一些(如果您每天只有几百次点击,而 GC 每千次左右才触发一次,那么会话可能会比应有的时间更长),我想如果您有很多会话,它对服务器的要求可能比本机 GC 要低一些。

相关内容