这对我来说也是一个问题。我们每秒获得 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; 你可以走了!