首页 > 解决方案 > cakephp-3 是否从我的数据库中删除过期会话?

问题描述

我的会话数据库表正在填满(大约 2 个月后大小接近 1GB)。有很多会话具有过去的过期日期。我可以编写一个 cron-job 来定期删除它们,但这是推荐的方法吗?或者有 cakephp 内置功能来清理过期会话,在我的应用程序中没有正确配置或禁用?

我的会话配置:

'Session' => [
    'defaults' => 'database',
    'ini' => [
        'session.cookie_path' => '/',
        'session.cookie_domain' => 'something.local'
    ],
    'timeout' => 4320 // 3 days
],

标签: cakephpcakephp-3.0

解决方案


CakePHP 的数据库会话处理程序使用标准化的 PHP 会话处理程序 API,即它实现SessionHandlerInterface并通过session_set_save_handler().

保存处理程序实现gc()删除过期会话的方法,即条件expires < time()适用的行。它在会话开始时由 PHP 在内部调用,具体取决于session.gc_divisorsession.gc_probability设置。

如果您的过期会话没有足够频繁地删除,请尝试更改 PHP 的垃圾收集设置和/或会话超时设置(请参阅timeout选项)(如果适用)。

也可以看看


推荐阅读