如何在Symfony2中增加会话寿命


How to increase the session lifetime in Symfony2?

我有一个带有记住复选框的登录名。如果选中了"记住"复选框,我正在尝试将会话的生存期设置为1年,但无论我尝试了什么,它都不起作用。。。Symfony探查器总是说会话生存期为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));
}

根据文档,可以通过config.yml:管理正常会话寿命

framework:
    session:
        cookie_lifetime: 3600

将寿命设置为一年:3600*24*365=86400*365=31536000。简单:)。

这将会话cookie生存期设置为1小时。您可以配置大量其他内容,但这就是为什么我包含了指向文档的链接
如果您坚持手动执行此操作,请在特定的案例/控制器中,将选项数组传递给控制器。也许这可以代替使用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中会话的所有内容都可以在此处找到。

正如Jakub Polák所指出的,如果您使用的是Symfony2.4,文档中有一个专门的部分涉及记住我的功能。它的本质是,复选框必须被称为_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设置,如下所述
你最好扫描整个安全区域。

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

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

您可以在此处找到相关文档。