首页 文章

Symfony 3.4会话时间

提问于
浏览
2

在我的Symfony 3.4应用程序中,用户会在一段时间后自动注销 . 我想更改此行为并使我的应用程序永远不会自动注销 . 它应该仅在用户单击注销链接时注销会话 .

我已经阅读了文档并尝试设置cookie_lifetime但它不适用于我 . 如果有人在这方面工作,请建议如何进行 .

Updates:

我正在使用此文档页面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

1 回答

  • 7

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

    framework:
        session:
            handler_id: ~
    

    因此,Symfony会话文件存储在 /var/lib/php/sessions 目录中 . 在基于Debian的操作系统中,cron作业每半小时删除一次会话文件 . 此cron作业基于与 apache2 关联的 PIDs 标识活动会话,并仅更新这些活动会话文件的上次访问时间和上次修改时间 .

    然后相同的cron作业是删除在_2989630之前具有最后修改时间的会话文件,即;非活动会话 . 主要问题是 gc_maxlifetime 仅基于 php.ini 文件确定,但不考虑Symfony的 .yaml 文件 . 因此,Symfony的 .yaml 文件中的配置将被忽略,并使用PHP的 gc_maxlifetime .

    这使得会话文件在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
    

    现在会话文件不存储在默认的 /var/lib/php/sessions 目录中,因此cron作业不会删除会话文件 . 现在Symfony正在处理这个会话处理工作,现在它完美地工作 .

相关问题