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

Тема в разделе "PHP", создана пользователем buket23, 18 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. buket23

    buket23

    Регистр.:
    3 окт 2008
    Сообщения:
    163
    Симпатии:
    10
    первый раз столкнулся с тем что куки остаются при закрытии curl, каким образом можно их чистить? поидее после curl_close($ch); они должны умирать но они живут и в следующей сессии, вот функция
    PHP:
    function post($url,$post,$refer)
        {
           
    $ch curl_init($url);
           
    curl_setopt($chCURLOPT_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($chCURLOPT_POST1);
           
    curl_setopt($chCURLOPT_POSTFIELDS$post);
           
    curl_setopt($chCURLOPT_REFERER$refer);
           
    curl_setopt($chCURLOPT_COOKIEJAR"./cook");
           
    curl_setopt($chCURLOPT_COOKIEFILE"./cook");
           
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
           
    curl_setopt($chCURLOPT_TIMEOUT10);
           
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
           
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
           
    $result  curl_exec($ch);
                  
    curl_close($ch);
    return 
    $result;
        }
     
  2. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Дык кукисы в файле cook сохраняются после закрытия соединения.
     
  3. buket23

    buket23

    Регистр.:
    3 окт 2008
    Сообщения:
    163
    Симпатии:
    10
    т.е. я как понял CURLOPT_COOKIEFILE хранит куки на момент сессии? в curl подробно не вдавался, мне надо хранить куки на момент сессии потом убивать их, есть только идея сделать функцию открытия и чистки файла куков по началу другой сессии, какие другие варианты подскажете?
     
  4. Yaggi Jah

    Yaggi Jah Постоялец

    Регистр.:
    15 ноя 2006
    Сообщения:
    75
    Симпатии:
    31
    В конце сессии unlink("./cook");
     
  5. buket23

    buket23

    Регистр.:
    3 окт 2008
    Сообщения:
    163
    Симпатии:
    10
    я так понял так? спасибо за подсказку
    PHP:
    function post($url,$post,$refer)
        {
           
    $ch curl_init($url);
           
    curl_setopt($chCURLOPT_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($chCURLOPT_POST1);
           
    curl_setopt($chCURLOPT_POSTFIELDS$post);
           
    curl_setopt($chCURLOPT_REFERER$refer);
           
    curl_setopt($chCURLOPT_COOKIEJAR"./cook");
           
    curl_setopt($chCURLOPT_COOKIEFILE"./cook");
           
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
           
    curl_setopt($chCURLOPT_TIMEOUT10);
           
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
           
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
           
    $result  curl_exec($ch);
           
    curl_close($ch);
           return 
    $result;
           
    unlink("./cook");
        }  
    пардон туплю под конец дня, понял куда вставить, спасибо
     
  6. m0hze

    m0hze Писатель

    Регистр.:
    25 дек 2009
    Сообщения:
    5
    Симпатии:
    1
    Ну:
    1) Нужно поставить unlink(res); перед ретурном
    2) Нужно это вообще делать в начале функции.А вдруг в предидущий раз чтото пошло не так,и файл не почистился? Курл будет работать со старыми куками в таком случае.Нужно все продумывать.
     
  7. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Можно попробовать вообще отказаться от CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE, а все необходимое вручную парсить из хедеров при включенном CURLOPT_HEADER и затем подставлять в CURLOPT_COOKIE. Однако вариант с удалением файла выглядит проще.
     
  8. dsda

    dsda Писатель

    Регистр.:
    21 апр 2008
    Сообщения:
    4
    Симпатии:
    0
    а разьве нет требования чтобы файл под куку уже был создан? У меня почему-то ругается если такого файла нет.
     
  9. Дикс

    Дикс Читатель

    Заблокирован
    Регистр.:
    24 май 2008
    Сообщения:
    11
    Симпатии:
    1
    никогда не пользовался файлами

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

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

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

    curl_setopt($hnd, CURLOPT_COOKIE, $cookie);
     
    buket23 нравится это.
  10. betatest

    betatest

    Регистр.:
    3 дек 2007
    Сообщения:
    517
    Симпатии:
    127
    если куки не нужно использовать в дальнейшем, то зачем хранить их в файле? Это лишние тормоза при работе, тем более, если многопоточность завязана

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

    обращение к диску - всегда самая медленная операция
     
Статус темы:
Закрыта.