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


26

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选择这样做?

Answers:


29

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

编辑:支持文档:该行为是对Bug#267720的响应。(以前在库存php.ini文件中有关于此的注释,但是在基于wheezy的PHP安装中,我现在看不到它们。)


/ var / lib / php5上的权限是ar drwx-wx-wt(根目录),因此apache用户可以写入dir内容(粘性位),但无法读取。因此,我了解到php的垃圾回收器将无法评估会话文件的时间,因此无法选择要删除的文件...对吗?
nulll

对,那是正确的。
asciiphil,

5

在流量较低的网站上,它可能会更可靠(如果您每天仅获得两百次点击,而GC仅每隔一千次触发一次,则会话的停留时间可能比他们应有的更长),我想这可能是一个如果您有很多会话,则服务器对本机的要求不如本机GC苛刻。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.