如何在Symfony2中增加会话生存期?

时间:2014-04-29 10:57:36

标签: php session symfony

我有一个记住复选框的登录信息。 如果选中记住复选框,我会将会话的生命周期设置为1年,但无论我尝试什么,它都不起作用... Symfony profiler总是说会话生存期为0。

这就是我在控制器功能中尝试的内容:

$this->getRequest()->getSession()->set("gesaudit",array("login"=>true,"user"=>$user));

if($remember == "1"){
    $lifetime = new NativeSessionStorage();
    $lifetime->setOptions(array('cookie_lifetime' => 31557600));
}else{
    $lifetime = new NativeSessionStorage();
    $lifetime->setOptions(array('cookie_lifetime' => 0));
}

2 个答案:

答案 0 :(得分:16)

根据documentation,通过config.yml:

可以管理正常会话生存期
framework:
    session:
        cookie_lifetime: 3600

将生命周期设置为一年:3600 * 24 * 365 = 86400 * 365 = 31536000.简单:)。

这会将会话cookie生命周期设置为1小时。您可以配置大量其他内容,但这就是我添加文档链接的原因 如果您坚持在特定情况/控制器中手动执行此操作,请将options数组传递给控制器​​。也许这会工作而不是使用setOptions方法:如果你的php.ini包含:

session.auto_start = 1

然后创建NativeSessionStorage实例将自动,并立即创建具有默认生存期的会话。之后进行设置几乎没有差别。检查您的ini设置,或执行:

$test = new NativeSessionStorage();
var_dump($test->isStarted())

如果转储true,请尝试:

$lifetime = new NativeSessionStorage(
    array(
        'cookie_lifetime' => 31536000
    )
);

可以找到Symfony2中的所有会话here

如果您使用的是Symfony2.4,那么文档中有一个特殊部分可以处理remember-me functionality,正如JakubPolák所指出的那样。它的本质是复选框必须被称为_remember_me,config.yml必须定义%secret%值,并且您将(定制的)版本添加到您的security.yml文件:

firewalls:
    main:
        remember_me:
            key:      "%secret%"
            lifetime: 31536000
            path:     /
            domain:   ~ # Defaults to the current domain from $_SERVER

但文档解释了这一切,但你必须“巡航”手册。例如,如果您要为特定部分指定不同的记住我行为,请更改上面yml代码段中的main,并添加pattern设置,为explained here
您最好扫描the entire security section

答案 1 :(得分:1)

应该在security.yml配置文件中完成:

secured_area:
    pattern:  ^/yourpattern
    remember_me:
        key:      "%secret%"
        lifetime: 31536000 # 365 days in seconds
        path:     /yourpath
        domain:   .yourdomain.com

您可以找到相关文档here