我有一个带有记住复选框的登录名。 如果选中记住复选框,我会尝试将 session 的生命周期设置为 1 年,但无论我尝试什么,它都不起作用...Symfony 探查器总是说 session 生命周期为 0。
这就是我在我的 Controller 函数中尝试的:
$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));
}
最佳答案
根据 documentation 可以管理正常 session 生命周期, 通过 config.yml:
framework:
session:
cookie_lifetime: 3600
要将生命周期设置为一年:3600*24*365 = 86400*365 = 31536000。简单 :)。
这会将 session cookie 的生命周期设置为 1 小时。您可以配置大量其他内容,但这就是我提供文档链接的原因。
如果您坚持手动执行此操作,在特定情况下/ Controller 中,则将选项数组传递给 Controller 。也许这样可以代替使用 setOptions
方法:如果您的 php.ini 包含:
session.auto_start = 1
然后创建 NativeSessionStorage
实例将自动并立即创建具有默认生命周期的 session 。之后设置它几乎没有或没有区别。检查您的 ini 设置,或执行以下操作:
$test = new NativeSessionStorage();
var_dump($test->isStarted())
如果它转储true
,尝试:
$lifetime = new NativeSessionStorage(
array(
'cookie_lifetime' => 31536000
)
);
Symfony2 session 中的所有内容都可以找到here .
如果您使用的是 Symfony2.4,文档中有一个特殊部分处理 remember-me functionality ,正如 Jakub Polá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 .
关于php - 如何增加 Symfony2 中的 session 生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362701/