我有一个带有记住复选框的登录名。如果选中了"记住"复选框,我正在尝试将会话的生存期设置为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
您可以在此处找到相关文档。