Невозможно обменять данные сеанса в CURL - PullRequest
0 голосов
/ 06 октября 2010

Я вызываю invoke.php, используя CURL из curl.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;

}

// выполнить мульти дескриптор

$ running = null;

do {

curl_multi_exec($mh,$running);

// added a usleep for 0.25 seconds to reduce load

usleep (250000);

} while ($ running> 0);

// получить содержимое URL (если есть)

for ($ i = 0; $ i

{

// 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');

Ответы [ 3 ]

1 голос
/ 13 апреля 2012

У меня была такая же проблема.Вот как я решил это:

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, иначе он создаст бесконечный цикл.Вы должны отправить куки или вы не получите результат.

1 голос
/ 06 октября 2010

Возможны две проблемы:

  1. Вы не можете быть уверены, что оба сценария будут иметь доступ к одному и тому же сеансу (с одинаковым идентификатором сеанса), на самом деле я могу поспорить, что у них есть отдельные сеансы.Конечно, вы можете применить это, отправив идентификатор сеанса из invoke.php в curl.php, добавив дополнительный параметр к URL-адресу, а затем используйте этот параметр, чтобы принудительно установить идентификатор сеанса в curl.php

0 голосов
/ 06 октября 2010

Я смог решить эту проблему. Я установил curl_

setopt($ch, CURLOPT_COOKIE,session_name().'='.session_id());

чтобы использовать тот же идентификатор сеанса и использовать функцию php's session_write_close () для записи данных сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...