从自定义设置的会话文件夹中删除旧的会话文件?

5

如果我使用PHP设置自定义会话文件夹存储会话文件,我需要做什么来确保旧的会话文件最终被删除? 有没有办法让Apache或PHP替我处理这个问题,还是我需要设置一些东西来清理这个文件夹? 任何关于此主题的信息都将不胜感激。

如果使用session_save_path()更改会话文件夹,是否会有所不同。


可能是 Session Files Not Getting Cleaned Up 的重复问题。 - hakre
3个回答

7
是的,您需要手动清理它们,因为您已经设置了自己的会话保存路径。(今天它说这只适用于分割目录选项,但我有些服务器仍然需要使用此功能,即使不使用该功能但使用自定义会话保存路径,而且它是一些PHP 5.2.x版本并且需要手动清理。)
您可以检查文件的年龄,并在其超过x天/分钟后删除:
cd /path/to/sessions; find -cmin +24 | xargs rm

php.ini的注释部分获取:
; NOTE: If you are using the subdirectory option for storing session files
;       (see session.save_path above), then garbage collection does *not*
;       happen automatically.  You will need to do your own garbage
;       collection through a shell script, cron entry, or some other method.
;       For example, the following script would is the equivalent of
;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
;          cd /path/to/sessions; find -cmin +24 | xargs rm

请参考相关/重复的问题:清理 PHP 会话文件


"Single"命令:

find /path/to/session -name sess_* -cmin +24 -exec rm {} \;

我们需要定期执行这个命令吗?另外,我们只能在服务器上执行此命令,还是可以使用 PHP 文件执行? - vidhi
@vidhi:这仅适用于现在很少见的特定会话配置。如果需要,它应该在crontab中设置。 如有疑问,请联系有关主机的系统管理员。 - hakre

7
只要您不在php的session.save_path设置中使用N;选项,PHP将根据session.gc_probability / session.gc_divisor / session.max_lifetime设置自动清除过期会话。
如果您自己编写了会话处理程序,则需要负责清理。

0
你需要定期清理自定义的PHP会话目录。可以运行一个CRON作业来处理这个问题。我们使用Plesk,它有一个便捷的CRON/任务管理器,在工具和设置中可以找到计划任务。你可以创建一个新的任务,并在预设的时间间隔内运行脚本/命令。
另一个要注意的是,如果你在一个共享服务器上或者会话目录与其他站点/资源共享,最好运行自定义会话路径。
我把这个答案/主题发在这里,因为它对我很有帮助,而且在网上关于自定义PHP session_path 的建议并不多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接