PHP会话数据存储在服务器端的sess_{$hash}
设置的session.save_path
设置目录中的php.ini
文件中。
如果我的理解是正确的,则应在定义的时间段后删除这些文件。这次如何获得以及如何设定?我尝试设置session.cache_expire
和session.gc_maxlifetime
。例如。我将session.cache_expire
设置为2
(分钟),但是两分钟后文件仍然存在。我还将session.gc_maxlifetime
设置为120
(秒)。但这也不起作用。
如何配置PHP以在定义的时间段后删除sess_*
文件?
答案 0 :(得分:2)
session.gc_maxlifetime
定义了何时将会话数据标记为垃圾收集(不一定是在删除时)。该数据的实际删除取决于许多变量。最突出的是session.gc_probability
和session.gc_divisor
。 除数上的概率确定会话初始化过程将调用垃圾收集器清理标记垃圾的机会。默认情况下,它们分别为1
和100
(表示垃圾收集器清理的可能性为1%)。
这是PHP垃圾收集会话数据的默认机制。但是,在某些系统(最著名的Ubuntu )上,默认会话GC被外部清除机制所取代,该机制作为cron作业实施,该作业定期运行以根据stat调用和{ {1}}。
随着session.gc_maxlifetime
呼叫数量的增加,陈旧会话数据被定期清理的可能性增加,您在繁忙的站点上往往不会注意到这些副作用。但是,在人流量低的站点(即您的开发环境)上,这种可能性下降的幅度足够大,以至于您可能会发现过时的会话数据徘徊了一段时间。这通常是无关紧要的。只要您要删除会话Cookie,并在需要删除会话时定期使用session_start()
,就无济于事了。