我正在尝试执行以下操作:
$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不存在的错误。
答案 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();
}