CakePHP在app / tmp / sessions中只用少量用户创建数百个会话文件是否正常?

时间:2012-05-16 17:03:37

标签: cakephp-2.1

我让系统(CakePHP 2.1)运行了大约两周,并且不得不删除成千上万的会话文件。删除它们后,它们又开始滚动。我让它运行了几个小时,我达到了426个文件。这对系统中的10个用户来说是正常的吗?我有一个robot.txt文件告诉引擎惹恼,我在所有页面上都有htth和https。有人可以为我解释一下吗?

Configure::write('Session', array(
    'defaults' => 'cake',
    'cookie' => 'scsys',
    'timeout' => 600
));

1 个答案:

答案 0 :(得分:1)

这对我来说也是一个问题。我们每秒获得1000个会话文件。

这样做的原因是我们将Session组件加载到AppCOntroller中,并且每隔几秒就会有一些cron作业从远程服务器上访问我们站点上的URL。由于在服务器userAgent上禁用了Cookie,因此每次运行cron时都必须创建一个新会话(启用了cookie的普通userAgent将使用相同的会话文件)。

这有两种解决方法。一种是将Session组件移出AppController并移动到您需要的特定控制器中。另一个,我选择的解决方案是在运行的每个cron之后使用php命令session_destroy()。为了更进一步,我已经制作了一个插件Cron,其中包含Cotroller / CronAppController.php:

    /**
    * class to extend if you want the session destroyed after an action has completed. 
    * Useful for limiting cake session file storage overload
    *  
    */


    class CronAppController extends AppController {

        /**
         * set this to true in a controller action if you want the session destroyed 
         */
        public $cronAction = false;

        function afterFilter(){
            parent::afterFilter();
            if($this->cronAction){
                session_destroy();
            }
        }
    }

然后使用Cron.CronAppController扩展具有cron操作的控制器,然后在您的操作集$ this-> cronAction = true;你很高兴去!