我想在cookie中存储用户的会话ID。
所以我写了这段代码:
public function indexAction()
{
$session_id = $this->get('session')->getId();
$request = $this->get('request');
$value = $request->cookies->get('session_id');
if ($value == null)//if cookie session_id does not exist, we create it
{
$cookie = new Cookie('session_id', $session_id, time() + (3600 * 24 * 7));
$response = new Response();
$response->headers->setCookie($cookie);
$response->send();
}
else echo 'A cookie session_id has already been set :' . $value;
return $this->render('MyBundle:Default:index.html.twig');
}
1.首先,我不知道在哪里放这个代码。我不认为把它放在indexAction中是正确的。
2.存储会话ID的cookie PHPSESSID已存在。更改它的到期时间而不是创建一个新的更好吗?如何更改其到期时间呢?
3.要更改我的cookie session_id的到期时间,我试过:
$cookie = new Cookie('session_id', $session_id, time() + (3600 * 24 * 7));
4.当我重新打开浏览器时,我也收到以下错误:Failed to start the session because headers have already been sent.
这似乎是由于此次调用$this->get('session')
以及此行:$response->send();
但我不是&#39我怎么能以另一种方式做到这一点。
但这不起作用:当我关闭浏览器并重新打开它时,我定义的所有cookie都已消失,PHPSESSID有一个新值。
答案 0 :(得分:0)
您可以在框架部分下的配置文件中设置会话生命周期。 config.yml的示例可能如下所示:
framework:
secret: %secret%
charset: UTF-8
error_handler: null
csrf_protection:
enabled: true
router: { resource: "%kernel.root_dir%/config/routing.yml" }
validation: { enabled: true, annotations: true }
templating: { engines: ['twig'] } #assets_version: SomeVersionScheme
session:
default_locale: %locale%
lifetime: 3600
auto_start: true
您可以在此处找到更多信息:http://forum.symfony-project.org/viewtopic.php?f=23&t=34110