如何清理php会话文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

在我的网站上使用PHP会话。会话信息存储在我的./session路径的文件中。几个月后,我发现这些会话文件永远不会被删除,现在在这个目录中有145.000个会话文件。

这些应该如何清理?我是否必须以编程方式执行此操作,或者我可以在某处使用会自动进行清理的设置吗?

提问于
用户回答回答于

要正确处理会话,请查看http://php.net/manual/en/session.configuration.php

你会发现这些变量:

  • session.gc_probability
  • session.gc_divisor
  • session.gc_maxlifetime

这些控制每个页面请求运行的垃圾收集器(GC)概率。

可以在脚本或.htaccess文件的开始处设置ini_set(),以便在某种程度上确定它们将在某个时间被删除。

用户回答回答于

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

扫码关注云+社区

领取腾讯云代金券