2013-11-12 4 views
0

Поэтому я использую cURL для получения данных со страницы 1, извлекаю информацию из нее и сохраняю ее в массиве. Следующий шаг - загрузить следующую страницу, я делаю это, создавая новый cURL с тем же файлом cookiejar и файлом cookie. Я правильно вижу страницу 1, но страницы 2 отображаются: сеанс не найден. Возможно, сессия истекло. Посмотрев информацию заголовка, я вижу, что на странице 1 он устанавливает cookie WCOOKIE = rd244o00000000000000000000ffff912c10f5o80.
В заголовках страницы 2 он устанавливает cookie WCOOKIE = rd244o00000000000000000000ffff912c10f6o80.
Так вот почему он считает, что сеанс истек, он не загружает файл cookie, но страница пытается его переписать. Итак, мой вопрос: что я должен сделать, чтобы страница 2 загружала cookie, заданную на странице 1, вместо того, чтобы пытаться установить новый файл cookie?PHP cURL Сессия не найдена/сессия, возможно, истек

Дополнительная информация: Загрузка двух страниц происходит в одном файле (1.php), потому что мне нужно хранить как данные в массиве 1, так и файл cookie со страницы 1, чтобы иметь возможность запрашивать страницу 2.

Обе страницы настроены на использование заголовков:

$headers[] = "Accept: */*"; 
$headers[] = "Connection: Keep-Alive"; 
$headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8"; 

Загрузка страницы 1:

$cSession = curl_init(); 
$tmpfname = dirname(__FILE__).'/cookie.txt'; 
curl_setopt($cSession, CURLOPT_COOKIEJAR, $tmpfname); 
curl_setopt($cSession, CURLOPT_COOKIEFILE, $tmpfname); 
curl_setopt($cSession, CURLOPT_HTTPHEADER, $headers); 
curl_setopt ($cSession, CURLOPT_COOKIESESSION, TRUE); 

Загрузка страницы 2:

$ch = curl_init(); 
$tmpfname = dirname(__FILE__).'/cookie.txt'; 
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpfname); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpfname); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt ($ch, CURLOPT_COOKIESESSION, TRUE); 

Это еще не все настройки, но я предполагаю, что мне нужно что-то изменить в этих строках, если вам нужна дополнительная информация, дайте мне знать, и я опубликую их.
Помогите оценить:

ответ

1

Хорошо, я, наконец, исправил это благодаря этому сообщению how to get the cookies from a php curl into a variable. Я размещаю его здесь для других людей, имеющих ту же проблему.
Сначала я включил CURLOPT_HEADER в запросе 1. Затем я использовал этот код, чтобы получить печенье:

preg_match('/^Set-Cookie:\s*([^;]*)/mi', $result, $m); 
parse_str($m[1], $cookies); 
$cookie = $cookies['NAMEOFCOOKIEUNEEDHERE']; 

Так тогда я мог бы передать это печенье по запросу в 2 с помощью этого:

curl_setopt($ch, CURLOPT_COOKIE, 'NAMEOFCOOKIEUNEEDHERE='.$cookie); 

Надеюсь, это может помочь любому

Смежные вопросы