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

nul*_*lll 29 ubuntu php debian garbage-collecting

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

session.gc_probability = 0
Run Code Online (Sandbox Code Playgroud)

相反,他们使用 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
Run Code Online (Sandbox Code Playgroud)

为什么 Debian 选择这样做?

asc*_*hil 34

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

编辑:支持文档:该行为是为了响应错误 #267720而建立的。(过去在库存php.ini文件中有关于此的评论,但我现在在基于 wheezy 的 PHP 安装中看不到它们。)


cee*_*yoz 5

在流量较低的网站上它可能更可靠一些(如果你每天只有几百次点击,而 GC 每隔一千左右才触发一次,会话可能会比他们应该坚持的时间更长),我想这可能是一个如果您有很多会话,那么对服务器的苛刻程度会比本地 GC 少一些。