我正在查看这篇文章。如何从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: ~
仅此而已,现在我可以在另一个控制器中使用会话,甚至可以在一个小树枝模板中使用。
感谢大家的帮助!
控制器内部的会话操作可以通过以下两种方式之一获得:
$this->getRequest()->getSession()
$request->getSession()