PHP 会话文件会被删除吗?

PHP 会话文件会被删除吗?

我发现我的“/tmp”目录(一台 CentOS 机器)中有数千个文件,其中几乎所有文件都是 PHP 会话文件。
我担心这可能会对我的系统造成影响。
这些文件是否曾被操作系统、Apache 或 PHP 删除过?还是我必须自己处理?

答案1

它们应该由 PHP 垃圾收集器删除。频率由 php.ini 中的设置控制session.gc_maxlifetime。如果此功能没有启动,则可能会出现其他问题。

答案2

在默认的 Debian 和 Ubuntu 上,会话由 cron 清理/etc/cron.d/php5

# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

其中,/usr/lib/php5/maxlifetime给出在 中设置的以分钟为单位的生命周期session.gc_maxlifetime

答案3

重启时也是如此 - 因为 /tmp 总是在重启时被清除。

答案4

您可以设置一个 cron 脚本来自动清理它们。通常,测试创建日期是否早于系统上设置的 cookie 寿命是一个好主意。

限制 cookie 寿命的方法如下(必须在脚本输出任何内容之前完成):

<?php
session_name('my_site_name');
session_set_cookie_params(1209600); # max cookie age of 14 days
# send cookie headers
session_start();
?>

然后,在清理脚本中:

#!/bin/sh
find /tmp -maxdepth 1 -type f -name 'php_session_file_prefix*' -ctime +15 -exec rm -f {} \;

然后,在你的 crontab 中:

# Run daily cron jobs at 03:40 every day
40 3 * * * /path/to/php-session-cleanup.sh

相关内容