我有一个记住复选框的登录信息。 如果选中记住复选框,我会将会话的生命周期设置为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));
}
答案 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。