【发布时间】:2026-02-22 01:30:01
【问题描述】:
在 20 分钟不活动后,会话应在应用程序内过期。
我如何在 symfony2 中做到这一点。
【问题讨论】:
在 20 分钟不活动后,会话应在应用程序内过期。
我如何在 symfony2 中做到这一点。
【问题讨论】:
在config.yml 文件的framework 部分下设置session 过期时间。
config.yml
framework:
secret: %secret%
charset: UTF-8
error_handler: null
csrf_protection:
enabled: true
router: { resource: "%kernel.root_dir%/config/routing.yml" }
validation: { enabled: true, annotations: true }
templating: { engines: ['twig'] } #assets_version: SomeVersionScheme
session:
default_locale: %locale%
lifetime: 3600
auto_start: true
将 session: lifetime 的值更改为以秒为单位的默认值 3600。
【讨论】:
PHP 将传递存储在php.ini 指令会话gc_maxlifetime 中的值。任何超过gc_maxlifetime 之前保存的存储会话都应该被删除。这允许根据空闲时间使记录过期。
cookie_lifetime 将设置为一个相对较高的值,垃圾收集 gc_maxlifetime 将设置为在所需的空闲时间销毁会话。
本机会话存储使用 cookie。处理会话的另一个例子是将它们存储在数据库中。
Jayson 的方法会导致会话在一小时后过期。您还可以随时强制注销用户,如下所示:
$this->container->get('request')->getSession()->invalidate();
$this->container->get('security.context')->setToken();
注意:从 Symfony 2.6 开始,security.context 服务已被弃用,并分为两个新服务:security.authorization_checker 和 security.token_storage。
【讨论】:
cookie_lifetime: 3600