Symfony 3.4会话时间

时间:2018-03-16 14:29:02

标签: symfony php-7.1 symfony4 symfony-3.4

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

我已阅读文档并尝试设置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

2 个答案:

答案 0 :(得分:10)

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

framework:
    session:
        handler_id: ~

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

然后,相同的cron作业是删除在gc_maxlifetime之前具有最后修改时间的会话文件,即;非活动会话。主要问题是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正在处理这个会话处理工作,现在它可以很好地工作。

答案 1 :(得分:0)

这是symfony 4的解决方案。

session:
        #handler_id: ~
        handler_id: session.handler.native_file
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'        
        cookie_lifetime: 1800 // was "lifetime" but deprecated