Symfony 3.4 session 时间

标签 symfony php-7.1 symfony4 symfony-3.4

在我的 Symfony 3.4 应用程序中,用户会在一段时间后自动注销。我想改变这种行为,让我的应用程序永远不会自动注销。仅当用户单击注销链接时,它才应注销 session 。

我已阅读文档并尝试设置 cookie_lifetime 但它对我不起作用。如果有人从事该领域的工作,请建议如何继续。

更新:

我正在使用此文档页面 http://symfony.com/doc/master/components/http_foundation/session_configuration.html#session-lifetime

我正在使用基于 Symfony 3.4 flex 的项目。

我正在 config/packages/framework.yml 中设置配置。配置如下:

framework:
    session:
        handler_id: ~
        cookie_lifetime: 31536000
        gc_maxlifetime: 31536000

最佳答案

经过长时间的调试,我发现以下配置告诉 Symfony 使用默认的 PHP 保存处理程序和默认的 session 文件路径。

framework:
    session:
        handler_id: ~

因此 Symfony session 文件存储在 /var/lib/php/sessions 目录中。在基于 Debian 的操作系统中,cron 作业每半小时删除一次 session 文件。此 cron 作业根据与 apache2 关联的 PID 识别事件 session ,并仅更新这些事件 session 文件的上次访问时间和上次修改时间。

然后,同一个 cron 作业正在删除上次修改时间早于 gc_maxlifetime 的 session 文件,即:非事件 session 。主要问题是gc_maxlifetime仅根据php.ini文件确定,而没有考虑Symfony的.yaml文件。因此,Symfony 的 .yaml 文件中的配置将被忽略,并使用 PHP 的 gc_maxlifetime

这使得 session 文件在 20 分钟到 30 分钟后被删除。为了解决这个问题,我更新了 .yaml 配置,如下所示:

framework:
    session:
        handler_id: session.handler.native_file
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
        cookie_lifetime: 31536000
        gc_maxlifetime: 31536000

现在 session 文件不存储在默认的 /var/lib/php/sessions 目录中,因此 cron 作业不会删除 session 文件。现在 Symfony 正在处理这个 session 处理工作,并且现在工作得很好。

关于Symfony 3.4 session 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323144/

相关文章:

php - symfony 在登录期间更改路由中的语言环境

php - 从 Controller 访问 Liip Imagine bundle - 将服务分配给变量(Symfony 4)

architecture - 如何使用 symfony4 实现模块化架构

webforms - symfony2 表单模板

php - 为什么 Doctrine 总是向有条件的左连接返回 null?

javascript - Symfony 4/javascript - 关系上的 UniqueEntity 约束

未加载 PHP 7 curl

unit-testing - 使用私有(private)/ protected 常量测试类

laravel - 如何优化 Laravel 超大数据的导入流程?

php - 如何使用 Guzzle 6 发送表单字段?