首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >清理php会话文件

清理php会话文件
EN

Stack Overflow用户
提问于 2009-03-17 13:43:34
回答 9查看 134.8K关注 0票数 70

在我的网站上,我使用PHP会话。会话信息存储在my./ Session路径下的文件中。几个月后,我发现这些会话文件从来没有被删除过,到目前为止,在这个目录中有145.000个。

这些应该如何清理呢?我是否必须通过编程来完成这项工作,或者有没有一种设置可以让此清理工作自动进行?

EDIT忘了提一下:这个站点是在提供商那里运行的,所以我没有访问命令行的权限。我确实有ftp访问权限,但是会话文件属于另一个用户(我猜是job服务器进程运行的那个用户)从我得到的第一个答案来看,我认为这不仅仅是服务器或PHP上的一个设置,所以我想我必须用PHP实现一些东西,并定期从浏览器调用它(可能是从我家里自己机器上运行的cron作业)

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-03-17 14:45:27

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

在那里你可以找到这些变量:

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

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

您可以在脚本或.htaccess文件的开头使用ini_set()设置它们,这样您就可以在某种程度上确定它们将在某个时候被删除。

票数 65
EN

Stack Overflow用户

发布于 2009-03-17 13:50:52

Debian/Ubuntu使用/etc/cron.d/php5中定义的cronjob处理此问题

代码语言:javascript
复制
# /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返回会话应该保持活动状态的分钟数,如下所示

代码语言:javascript
复制
#!/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
票数 36
EN

Stack Overflow用户

发布于 2014-01-30 16:40:52

如果有人想要使用cronjob执行此操作,请记住这一点:

代码语言:javascript
复制
find .session/ -atime +7  -exec rm {} \;

当有很多文件时,速度非常慢。

请考虑使用下面的代码:

代码语言:javascript
复制
find .session/ -atime +7 | xargs -r rm

如果文件名中有空格,请使用以下命令:

代码语言:javascript
复制
find .session/ -atime +7 -print0 | xargs -0 -r rm

xargs将用要删除的文件填充命令行,然后运行比-exec rm {} \;少得多的rm命令,后者将为每个文件调用rm命令。

这只是我的两点意见

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/654310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档