如何在symfony2中访问$ _SESSION变量

时间:2014-12-07 01:55:04

标签: php symfony session

我正在尝试执行以下操作:

        $postfields = array_merge($_SERVER, array("p"=>$_POST, "s"=>$_SESSION));
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, count($postfields));
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);

为什么这不起作用?它总是给我一个$ _SESSION不存在的错误。

3 个答案:

答案 0 :(得分:2)

Symfony使用扩展PHP $_SESSION接口的特殊会话库。要将所有会话属性作为key => value数组访问,您可以使用(来自任何控制器/容器):

$all_session_variables = $this->get('session')->all(); // Returns array() format

或使用以下特定会话元素:

$key_session_variable = $this->get('session')->get('key'); // Returns the value stored in "key"

但假设您之前使用$this->get('session')->set()设置了会话变量,这只能保证有效。

Read more about Session Management here in the Symfony docs

为什么你得到“$_SESSION不存在”错误:你还没有声明session_start()! Symfony还没有为你做过这件事。但等待 NOT 编写该代码,因为上面的相同参考声明:

  

Symfony会话旨在取代几个本机PHP函数。应用程序应避免使用session_start()session_regenerate_id()session_id()session_name()session_destroy(),而是使用以下部分中的API。

您应该使用Symfony提供的会话库,因为:

  

虽然建议明确启动会话,但会话实际上会按需启动,也就是说,如果有任何会话请求来读/写会话数据。

答案 1 :(得分:1)

要获得会话,请在控制器中尝试此操作:

答案 2 :(得分:0)

推荐方式(在控制器中):

...

public function testAction(Request $request)
{
    $session = $request->getSession();
}

...

或通过注入RequestStack(在CustomService中):

private $requestStack;

public function __construct(RequestStack $requestStack)
{
    $this->requestStack = $requestStack;
}

public function myMethod()
{
    $session = $this->requestStack->getCurrentRequest()->getSession();
}