N. *_*nan 3 symfony php-7.1 symfony-3.4 symfony4
在我的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
Run Code Online (Sandbox Code Playgroud)
N. *_*nan 12
经过长时间的调试,我发现以下配置告诉Symfony使用默认的PHP保存处理程序和默认的会话文件路径.
framework:
session:
handler_id: ~
Run Code Online (Sandbox Code Playgroud)
因此,Symfony会话文件存储在/var/lib/php/sessions目录中.在基于Debian的操作系统中,cron作业每半小时删除一次会话文件.此cron作业基于PIDs与apache2这些活动会话文件的关联和更新,以及仅更新这些活动会话文件的最后访问时间和最后修改时间来识别活动会话.
然后相同的cron作业是删除在gc_maxlifetimeie 之前具有最后修改时间的会话文件; 非活动会话.主要问题是仅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
Run Code Online (Sandbox Code Playgroud)
现在会话文件不存储在默认/var/lib/php/sessions目录中,因此cron作业不会删除会话文件.现在Symfony正在处理这个会话处理工作,现在它完美地工作.