我已经能够使用以下代码在我的curl请求创建的过程中使用我当前的会话 -
$query = http_build_query(array(
"pcode"=>strtolower($code)
));
$url = $_SERVER['REQUEST_SCHEME'].":".PUBLIC_ROOT."xyz.php"."?".$query;
session_write_close();
$curl = curl_init($url);
$useragent = $_SERVER['HTTP_USER_AGENT'];
$strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_GET, true);
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
curl_setopt($curl, CURLOPT_COOKIE, $strCookie );
$json_response = curl_exec($curl);
curl_close($curl);
我对以上代码使用了以下答案 - https://stackoverflow.com/a/15374966/815929
现在问题是在新进程(由curl请求创建)中,我需要设置一些会话变量。但是,这些会话变量不会在curl_close()
之后的调用过程中反映出来。
我的调用脚本中有一些会话变量。我能够在curl请求启动的新进程中使用这些会话变量。这个新流程还设置了一些新的会话变量。但是,当我们回到调用进程时,这些新的会话变量不会被反映出来。
我需要设置额外的卷曲选项才能使其正常工作吗?
答案 0 :(得分:1)
我很难想象它是如何运行的。
但是这些会话变量在curl_close()
之后的调用过程中没有反映出来
使用默认会话处理程序,第二个脚本如果从类似....
中调用它就应该超时session_start();
...
curl_exec(); // at this point session file is still locked
...
[session_close();]
$ strCookie ='PHPSESSID ='。 $ _COOKIE ['PHPSESSID']。 “;路径= /';
是吗?您没有在HTTP请求中指定cookie的路径(您在响应中执行)。这将告诉脚本客户端有一个名为“path”的cookie。
真的应该是......
$ strCookie = session_name()。 “=”。 SESSION_ID();
但是这些会话变量在curl_close()
之后的调用过程中没有反映出来
您是否从存储重新加载会话? (另请参阅前面有关会话文件锁定的说明)。你的代码应该像......那样做。
session_start();
...
session_close();
...
curl_exec();
...
session_start();
切换到non-blocking handler会更干净,或者更好但不通过会话传递状态 - 将数据POST到第二个脚本读取输出流的响应。