3

我让系统(CakePHP 2.1)运行了大约两个星期,不得不删除成千上万的会话文件。在我删除它们后,它们又开始滚动了。我已经让它运行了几个小时,最多有 426 个文件。这对于系统中的 10 个用户是否正常?我有一个robot.txt文件告诉引擎生气,我在所有页面的 https 上都有 auth 和 acl。任何人都可以为我解释一下吗?

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

1 回答 1

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; 你可以走了!

于 2013-12-03T17:52:30.567 回答