在我的网站上,我使用PHP会话。会话信息存储在my./ Session路径下的文件中。几个月后,我发现这些会话文件从来没有被删除过,到目前为止,在这个目录中有145.000个。
这些应该如何清理呢?我是否必须通过编程来完成这项工作,或者有没有一种设置可以让此清理工作自动进行?
EDIT忘了提一下:这个站点是在提供商那里运行的,所以我没有访问命令行的权限。我确实有ftp访问权限,但是会话文件属于另一个用户(我猜是job服务器进程运行的那个用户)从我得到的第一个答案来看,我认为这不仅仅是服务器或PHP上的一个设置,所以我想我必须用PHP实现一些东西,并定期从浏览器调用它(可能是从我家里自己机器上运行的cron作业)
发布于 2009-03-17 14:45:27
要正确处理会话,请看一下http://php.net/manual/en/session.configuration.php。
在那里你可以找到这些变量:
它们控制垃圾收集器(GC)对每个页面请求运行的概率。
您可以在脚本或.htaccess文件的开头使用ini_set()设置它们,这样您就可以在某种程度上确定它们将在某个时候被删除。
发布于 2009-03-17 13:50:52
Debian/Ubuntu使用/etc/cron.d/php5中定义的cronjob处理此问题
# /etc/cron.d/php5: crontab fragment for php5
# This purges session files older than X, where X is defined in seconds
# as the largest value of session.gc_maxlifetime from all your php.ini
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime
# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm
maxlifetime脚本通过检查php.ini返回会话应该保持活动状态的分钟数,如下所示
#!/bin/sh -e
max=1440
for ini in /etc/php5/*/php.ini; do
cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
[ -z "$cur" ] && cur=0
[ "$cur" -gt "$max" ] && max=$cur
done
echo $(($max/60))
exit 0
发布于 2014-01-30 16:40:52
如果有人想要使用cronjob执行此操作,请记住这一点:
find .session/ -atime +7 -exec rm {} \;
当有很多文件时,速度非常慢。
请考虑使用下面的代码:
find .session/ -atime +7 | xargs -r rm
如果文件名中有空格,请使用以下命令:
find .session/ -atime +7 -print0 | xargs -0 -r rm
xargs
将用要删除的文件填充命令行,然后运行比-exec rm {} \;
少得多的rm
命令,后者将为每个文件调用rm
命令。
这只是我的两点意见
https://stackoverflow.com/questions/654310
复制相似问题