我使用来自localhost的curl.php中的CURL调用invoke.php。在invoke.php中,我将一些数据存储在会话中。但是当我尝试从curl.php访问那些会话数据时,不要获取那些会话数据。我如何获得这些价值观?
curl.php的内容
`include_once('session.php');
$ handles = array();
$ urlArray = array('http://localhost/invoke.php');
foreach($ urlArray as $ url){
// create a new single curl handle
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// add this handle to the multi handle
curl_multi_add_handle($mh,$ch);
// put the handles in an array to loop this later on
$handles[] = $ch;
}
//执行多句柄
$运行= NULL;
做{
curl_multi_exec($mh,$running);
// added a usleep for 0.25 seconds to reduce load
usleep (250000);
} while($ running> 0);
//获取网址的内容(如果有的话)
为($ I = 0; $我
{
// get the content of the handle
// $ output。= curl_multi_getcontent($ handles [$ i]);
// remove the handle from the multi handle
curl_multi_remove_handle($mh,$handles[$i]);
}
echo SessionHandler :: getData('DATA'); `
invoke.php的内容
include_once ('session.php');
echo SessionHandler :: setData('DATA','HELLO WORLD');
答案 0 :(得分:1)
有两个可能的问题:
您无法确定两个脚本是否都会访问相同的会话(具有相同的会话ID),实际上我可以打赌他们有单独的会话。当然,您可以通过在URL中添加一个额外的参数将会话ID从invoke.php发送到curl.php来强制执行,然后使用该参数强制curl.php中的会话ID
第二个可能的问题是在session_start上读取会话变量(在填充$ _SESSION时),但是在启动会话后修改会话内容(在session.php中,我假设),这是为什么任何更改(即使满足1.上的条件)都不会反映在invoke.php中已经打开的会话中。我认为你应该强制会话关闭并重新启动它。
答案 1 :(得分:1)
我有同样的问题。这就是我解决它的方法:
function getContent($url){
$cookiesStr = '';
foreach($_COOKIE as $k => $v){
$cookiesStr.= $k . '=' . $v . '; ';
}#end COOKIE
$cookiesStr = rtrim($cookiesStr, ' ');
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookies.txt');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_COOKIE, $cookiesStr);
ob_start();
curl_exec ($ch);
curl_close ($ch);
$string = ob_get_contents();
ob_end_clean();
return $string;
}#end getContent
你必须有一个tmp cookie jar,否则会产生无限循环。您必须发送cookie,否则您将无法获得结果。
答案 2 :(得分:0)
我能解决这个问题。我设置了卷曲_
setopt($ch, CURLOPT_COOKIE,session_name().'='.session_id());
使用相同的会话ID并使用php的session_write_close()函数来编写会话数据。