php Symfony过期会话清理(垃圾收集)

50pmv0ei  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(98)

在运行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本身不支持会话清理?

xytpbqjk

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值为前缀。

相关问题