【发布时间】:2011-11-30 22:43:45
【问题描述】:
使用 PHP,如果我设置了一个自定义会话文件夹来存储会话文件,我必须做些什么来确保最终删除旧的会话文件?有没有办法让 Apache 或 PHP 为我处理这个问题,还是我需要设置一些东西来自己清理这个文件夹?非常感谢您提供有关此主题的任何信息。
我目前正在使用 session_save_path() 来更改会话文件夹,如果这有影响的话。
【问题讨论】:
使用 PHP,如果我设置了一个自定义会话文件夹来存储会话文件,我必须做些什么来确保最终删除旧的会话文件?有没有办法让 Apache 或 PHP 为我处理这个问题,还是我需要设置一些东西来自己清理这个文件夹?非常感谢您提供有关此主题的任何信息。
我目前正在使用 session_save_path() 来更改会话文件夹,如果这有影响的话。
【问题讨论】:
只要你不使用 php 的 session.save_path 设置中的 N; 选项,PHP 就会根据 session.gc_probability / session.gc_divisor / session.max_lifetime 设置自动清理过时的会话
如果您推出了自己的会话处理程序,则您将负责清理工作。
【讨论】:
是的,您需要手动清理它们,因为您有 setup your own session save path。 (今天据说它仅用于拆分目录选项,但我有服务器仍然需要它,即使不使用该功能但使用自定义会话保存路径,它是一些 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
请参阅这个相关/重复的问题:cleanup php session files
“单个”命令:
find /path/to/session -name sess_* -cmin +24 -exec rm {} \;
【讨论】:
您需要定期清理自定义 PHP 会话目录。您可以运行 CRON 作业来处理 @hakre 的答案
我们使用 Plesk,它在工具和设置 > 计划任务下有一个方便的 CRON/任务管理器。您可以创建新任务并以设定的时间间隔运行脚本/命令。
另一点是,如果您在共享服务器上或会话目录与其他站点/资源共享,则运行自定义会话路径非常好。
我在这里发布这个是因为答案/主题很有用,我在网上没有找到太多关于自定义 PHP session_path 的建议
【讨论】: