PHP:如何限制会话文件的数量?

时间:2009-09-06 18:59:52

标签: php session

我会定期删除会话文件中的tmp。显然,由于会话数量巨大,我对会话进行了错误管理。你如何管理你的会话,而不是他们的数量变得太大?如果存在新会话,您如何确保不进行新会话?

我使用的命令,不确定它们是如何工作的:

ob_start (); 
session_save_path("/tmp/");
session_start();
ob_end_flush (); 

2 个答案:

答案 0 :(得分:2)

在正确配置的PHP安装中,您不需要手动清理会话数据。您应该阅读sessions in the manual上的页面并查看部分configuration directives。可能性是您已将gc_maxlifetime设置为非常高的值,并且它们尚未达到“到期”限制以自动收集。您应该检查您的应用程序,以确保他们没有在运行时为会话设置设置奇怪的值(使用ini_set())。

PHP有一个在session_start()上运行的内部算法,用于决定是否应该执行垃圾清理运行并删除旧的会话文件。出于性能原因,我认为每次运行的默认机会是1%,因此平均每100次session_start()次调用就会启动一次垃圾收集例程。如果您发现这还不够,可以将gc_divisor设置提高到高于1的值。

答案 1 :(得分:0)

PHP应该会在旧会话文件超过几个小时后自动删除它们。您的session.gc_probability,session.gc_divisor和session.gc_maxlifetime设置可能包含奇数值。查看sessions runtime configuration section of the PHP manual以获取更多信息及其默认值。

这不是你可以(或应该)试图自己管理的东西。

如果您仍然有太多文件,请查看使用session.save_path中的高级设置来创建会话的子目录。这样可以加快文件系统对单个文件的访问速度。