【发布时间】:2011-08-21 11:37:35
【问题描述】:
我遇到了 symfony2 会话组件的问题。我通过会话容器将一些数据设置为会话,如下所示:
$sess = $this->get( 'session' );
$sess->set( 'some_key', 'some_value' );
但在一段时间后(大约 15-20 分钟),会话丢失了。
我可以设置会话寿命参数吗?对我来说,完美的变体是如果我可以设置特定的会话时间......有人可以帮忙吗?
【问题讨论】:
我遇到了 symfony2 会话组件的问题。我通过会话容器将一些数据设置为会话,如下所示:
$sess = $this->get( 'session' );
$sess->set( 'some_key', 'some_value' );
但在一段时间后(大约 15-20 分钟),会话丢失了。
我可以设置会话寿命参数吗?对我来说,完美的变体是如果我可以设置特定的会话时间......有人可以帮忙吗?
【问题讨论】:
在 Symfony 2.3 中,我认为正确的答案在 app/config/config.yml:
framework:
session:
cookie_lifetime: 7200
gc_maxlifetime: 3600
GC(垃圾收集)将在每次服务器被击中时重置,这意味着如果用户处于活动状态,他将有 3600 继续工作。 cookie_lifetime 将强制用户在其限制范围内注销。在此示例中,用户将有 1 小时处于非活动状态,并在 2 小时后被强制退出。
【讨论】:
您可以在配置文件中的framework 部分下设置会话到期时间。我的看起来像这样:
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%
cookie_lifetime: 3600 // was "lifetime" but deprecated
auto_start: true
您可以将 framework.session.lifetime 值更改为您想要的任何值,以秒为单位(默认为 3600 或 1 小时)。
参考here。
【讨论】:
NativeSessionStorage 中,我看到默认值来自 PHP 的 session_get_cookie_params(),因此默认的 PHP 会话 cookie 生命周期将为 0(浏览器关闭时到期)。此外,重要的是要注意,即使您更改 PHP 会话 cookie 生命周期,我认为您也必须在 PHP 设置中更改 session.gc_maxlifetime(因为默认为 1440 秒/24 分钟)。见tinyurl.com/6txls7n
session_get_cookie_params() 将覆盖传递的值。
0。哦,哇,错字。也是86,400!我会给他们发一个补丁,看起来有人搞砸了。
lifetime 已被 cookie_lifetime 弃用...看起来这里的文档已经过时了。
session_get_cookie_params() 将覆盖传递的值... Symfony2 v2.0 之后的另一个更改我可能不得不适应。 :)
为了舒适地工作,您可以在开发环境中设置cookie_lifetime to 0,这意味着cookie在浏览器关闭时过期。
文件:config_dev.php
framework:
session:
cookie_lifetime: 0
【讨论】: