在运行PHP 8.1的Symfony 5.4应用程序上,会话的默认配置如下所示:
# config/packages/framework.yaml
framework:
session:
handler_id: null
cookie_secure: auto
cookie_samesite: lax
storage_factory_id: session.storage.factory.native
它依赖于原生的PHP会话管理,在Debian系统上,会话文件存储在/var/lib/php/sessions/
中,过期的会话会被一个专门的清理服务(称为垃圾收集的过程)原生地处理。
如果按照文档中的说明更改另一个文件夹的save_path
选项,则配置将变为:
# config/packages/framework.yaml
framework:
session:
handler_id: 'session.handler.native_file'
save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
cookie_secure: auto
cookie_samesite: lax
storage_factory_id: session.storage.factory.native
现在,垃圾收集不再起作用,会话文件堆积在目标文件夹中。然而,我以为Symfony会调用SessionHandler::gc
。
这是否意味着Symfony本身不支持会话清理?
1条答案
按热度按时间xytpbqjk1#
https://www.php.net/manual/en/session.configuration.php#ini.session.save-path
还要注意,如果使用了N并且N大于0,那么自动垃圾收集将不会执行,请参阅php.ini的副本以获得更多信息。
我会检查https://github.com/symfony/symfony/blob/6.3/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/NativeFileSessionHandler.php文件中的
$savePath
是否没有以N
值为前缀。