Symfony2会话在另一个操作中为空

时间:2015-05-06 10:00:01

标签: symfony session

我有一个使用php本地会话的软件包,所以我用它来处理它:

framework:
    session:
            storage_id: session.storage.php_bridge
            handler_id: ~

在我的第一个动作中,会话正在运行,我获得了php的本机会话中提供的用户名。但是一旦我改变了Action,我的会话就是空的。

我实际上有这个:

indexAction(){
        $phpCas->execute(); //my service with the php's native session
        $session = new Session();
        $session->start();
        $user = $session->get('username')['fullName'];//I successfully get my full name
}

anotherAction(){

        $session = new Session();
        $session->start();
        $array = $session->all();
        echo "<pre>";
        print_r($array); //array is empty
        echo "</pre>";
}

我试过$ session = $ request-&gt; getSession();但仍然是空的。

还尝试了$ session-&gt; save();

和此:

framework:
    session:
            storage_id: session.storage.php_bridge
            handler_id: session.handler.native_file
            save_path: "%kernel.root_dir%/sessions"

感谢您的帮助。

EDIT1: 感谢第一个答案现在看起来像:

public function indexAction(Request $request)
    {
        $session = $request->getSession();
        $user = $session->get('user');
        if($user == null)
        {
            $phpCas = $this->container->get('phpcas');
            $phpCas->execute();
            $session = new Session();
            $session->start();
            $user = $session->get('username')['fullName'];
            $session->set('user', $user);
        }

public function createAction($persno, Request $request)
    {
        $session = $request->getSession();
        $array = $session->all();
        echo "<pre>";
        print_r($array);
        echo "</pre>";

}

我在第二个Action中仍然得到一个空会话,我忘了提到我以这种方式访问​​第二个Action:

return $this->redirect($this->generateUrl('admin_platform_create', array(
                    'persno' => $persno,
                )));

可能是问题吗?

EDIT2: 我现在正在尝试做上一篇文章中的那个人说: http://forum.symfony-project.org/viewtopic.php?f=23&t=71389

但实际上我也无法使其发挥作用。

1 个答案:

答案 0 :(得分:0)

您不需要启动会话,因为它已经被Symfony自动启动,您也应该从请求($ session = $ request-&gt; getSession())或容器($ session = $ this-)获取会话在控制器中使用&gt; container-&gt; getSession())

use Symfony\Component\HttpFoundation\Request;

indexAction(Request $request){
        $phpCas->execute(); //my service with the php's native session
        $session = $request->getSession();
        $user = $session->get('username')['fullName'];//I successfully get my full name
}

anotherAction(Request $request){
        $session = $request->getSession();
        $array = $session->all();
        echo "<pre>";
        print_r($array); //array is empty
        echo "</pre>";
}

您的更新进行了修改:

createAction($ persno,Request $ request) - 错误

createAction(Request $ request,$ persno) - right

你不应该直接将请求放在重定向中,它是由Symfony自动插入的第一个参数