Symfony,会话总是返回null


Symfony, session always return null

我正在查看这篇文章。如何从Symfony2中的服务访问用户会话?管理Symfony的会话。我想在用户输入特定信息后设置一个会话变量,并在另一个控制器甚至树枝模板中获取会话变量,所以。。。

我的控制器里有这个:

use Symfony'Component'HttpFoundation'Session;
class MyFirstController
{
    public function myFunction(Request $request)
    {
        $session =  $this->container->get('session');
        $session->set('user', array(
            'name' => 'My Name',
            'email' => 'fake@email.com'
        ));
        $session->save();
         var_dump($session->get('user')); //Print null
    }

}

另一个控制器:

use Symfony'Component'HttpFoundation'Session;
class MySecondController
{
    public function myFunction()
    {
        $session =  $this->container->get('session');
        var_dump($session->get('user')); //Print null
    }

}

即使在$session->save();返回null之后尝试访问会话变量

希望你能帮助我。

编辑

使用$session = $request->getSession();$session = $this->container->get('session');在两者上返回相同的会话实例。

config.yml

session:
    handler_id: session.handler.native_file
    save_path: "%kernel.root_dir%/sessions"

另一件事是,如果我不使用$session->save();设置会话后执行$session->get('user');它返回用户的值,但如果我重新加载页面并重试,现在会话为空。

您需要将会话存储在可访问的可写目录下。

我使用标准路径存储会话来解决问题var/lib/php/session

framework:
    session:
        save_path: ~

仅此而已,现在我可以在另一个控制器中使用会话,甚至可以在一个小树枝模板中使用。

感谢大家的帮助!

控制器内部的会话操作可以通过以下两种方式之一获得:

  1. $this->getRequest()->getSession()
  2. $request->getSession()