вопрос по curl и кукам

Статус
В этой теме нельзя размещать новые ответы.

buket23

Старатель
Регистрация
3 Окт 2008
Сообщения
163
Реакции
10
первый раз столкнулся с тем что куки остаются при закрытии curl, каким образом можно их чистить? поидее после curl_close($ch); они должны умирать но они живут и в следующей сессии, вот функция
PHP:
function post($url,$post,$refer)
	{
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       curl_setopt($ch, CURLOPT_POST, 1);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
       curl_setopt($ch, CURLOPT_REFERER, $refer);
       curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
       curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
       curl_setopt($ch, CURLOPT_TIMEOUT, 10);
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $result  = curl_exec($ch);
	          curl_close($ch);
return $result;
	}
 
Дык кукисы в файле cook сохраняются после закрытия соединения.
CURLOPT_COOKIEJAR - The name of a file to save all internal cookies to when the connection closes.
 
т.е. я как понял CURLOPT_COOKIEFILE хранит куки на момент сессии? в curl подробно не вдавался, мне надо хранить куки на момент сессии потом убивать их, есть только идея сделать функцию открытия и чистки файла куков по началу другой сессии, какие другие варианты подскажете?
 
В конце сессии unlink("./cook");
 
я так понял так? спасибо за подсказку
PHP:
function post($url,$post,$refer)
    {
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       curl_setopt($ch, CURLOPT_POST, 1);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
       curl_setopt($ch, CURLOPT_REFERER, $refer);
       curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
       curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
       curl_setopt($ch, CURLOPT_TIMEOUT, 10);
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $result  = curl_exec($ch);
       curl_close($ch);
       return $result;
       unlink("./cook");
    }
пардон туплю под конец дня, понял куда вставить, спасибо
 
я так понял так? спасибо за подсказку
PHP:
function post($url,$post,$refer)
    {
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       curl_setopt($ch, CURLOPT_POST, 1);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
       curl_setopt($ch, CURLOPT_REFERER, $refer);
       curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
       curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
       curl_setopt($ch, CURLOPT_TIMEOUT, 10);
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $result  = curl_exec($ch);
       curl_close($ch);
       return $result;
       unlink("./cook");
    }
пардон туплю под конец дня, понял куда вставить, спасибо
Ну:
1) Нужно поставить unlink(res); перед ретурном
2) Нужно это вообще делать в начале функции.А вдруг в предидущий раз чтото пошло не так,и файл не почистился? Курл будет работать со старыми куками в таком случае.Нужно все продумывать.
 
Можно попробовать вообще отказаться от CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE, а все необходимое вручную парсить из хедеров при включенном CURLOPT_HEADER и затем подставлять в CURLOPT_COOKIE. Однако вариант с удалением файла выглядит проще.
 
а разьве нет требования чтобы файл под куку уже был создан? У меня почему-то ругается если такого файла нет.
 
  • Заблокирован
  • #9
никогда не пользовался файлами

получить куки:

$return = curl_exec();
preg_match_all("/Set-Cookie: ([^;]*);/i", $return, $parse);
$cookie = (sizeof($parse[1]))? implode('; ', $parse[1]) : '';

использовать:

curl_setopt($hnd, CURLOPT_COOKIE, $cookie);
 
если куки не нужно использовать в дальнейшем, то зачем хранить их в файле? Это лишние тормоза при работе, тем более, если многопоточность завязана

Если требуется только обработка в данный момент и куки не будут использоваться в дальнейшем - избавляйся от файла, можно пример, приведенный выше использовать

обращение к диску - всегда самая медленная операция
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху