1

我想将用户的会话 ID 存储在 cookie 中。

所以我写了这段代码:

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));
  • 并在 config.yml 中设置,在会话下,生命周期为 604800。

4.当我重新打开浏览器时,我也收到以下错误:Failed to start the session because headers have already been sent.这似乎是由于这个调用$this->get('session')和这一行:$response->send();但我不知道我怎么能以另一种方式做到这一点。

但这不起作用:当我关闭浏览器并重新打开它时,我定义的所有 cookie 都已消失,并且 PHPSESSID 具有新值。

4

1 回答 1

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

于 2013-01-27T08:53:07.023 回答