Intereting Posts
Преимущество / недостаток глобальных переменных и функциональных параметров в PHP? Установка php-soap с yum и грушей не работает Как обрезать и выгружать фотографию с помощью плагина jQuery с помощью php Код ошибки Freebase: 403 – предел пользовательской скорости превышен. Пожалуйста, зарегистрируйтесь Предупреждение: mysql_num_rows (): предоставленный аргумент не является допустимым ресурсом результата MySQL Определить кодировку base64 в PHP? Ошибка отправки значения AJAX Интерпретировать escape-символы в одиночной кавычки подход для «сайта вниз для обслуживания» Что такое Perl, эквивалентный print_r () PHP? Получение числа строк и данных этой строки в одном запросе с использованием PDO в PHP Цикл таблицы PHP / базы данных – отображает только 15 строк во времени Как проверить значение null в Twig? Неизвестно: не удалось открыть окно «0ff» (include_path = '.: / Tmp: / usr / lib / php: / usr / local / lib / php') в Unknown в строке 0 Какую библиотеку сеансов следует использовать с CodeIgniter?

PHP – использование cURL для хранения сессии cookie в переменной / памяти

Я пытаюсь избежать cURL хранения сессии cookie в фактический файл через "CURLOPT_COOKIEJAR". Поэтому я создал метод для поиска / анализа файлов cookie в локальной переменной, которая затем используется через CURLOPT_COOKIE для восстановления сеанса cookie.

Я вырезал файлы cookie через

preg_match_all("/^Set-cookie: (.*?);/ism", $header, $cookies); 

Чтобы использовать «CURLOPT_COOKIE», мы берем значение key = и разделяем их через «;». Однако (как я знаю), CURLOPT_COOKIE не позволяет вам вводить различные флаги Ie expiration, secure flag и т. Д.

Обновление 1/29/2014 18:45

Поэтому я думаю, что моя проблема на самом деле происходит там, где происходит CURLOPT_FOLLOWLOCATION. Я не думаю, что это связано с флагами. Кажется, что сеанс ручного cookie, который у меня обновляется, после нового местоположения (т. Е. На сайте есть 2-3 перенаправления для добавления различных файлов cookie / сеанса). Это будет иметь смысл, поскольку использование CURLOPT_COOKIEJAR будет напрямую захватывать / обновлять файлы cookie, отправленные при перенаправлении заголовков. Итак, я попытался создать ручной путь перенаправления при захвате / добавлении последнего файла cookie – однако этот метод не работал по какой-то простой причине.

Обновление 1/30/2014 16:22

Почти это выяснилось. Скоро будет обновление с ответом. Оказывается, мой метод работает отлично, это просто вопрос правильной перемотки вручную.

Обновление 1/30/2014 4:51 вечера Проблема решена – ответил мне ниже.

Solutions Collecting From Web of "PHP – использование cURL для хранения сессии cookie в переменной / памяти"

Так что получается, что я делал это правильно, и мои предположения были правильными.

  1. Чтобы сохранить сеанс cookie в переменной (по сравнению с CURLOPT_COOKIEJAR). * Убедитесь, что включены CURLOPT_HEADER и CURLINFO_HEADER_OUT. *

  2. Для параметра CURLOPT_FOLLOWLOCATION должно быть установлено значение false. В противном случае ваш файл cookie не будет отправлен правильно (здесь лучше всего работает CURLOPT_COOKIEJAR).

  3. Используйте preg_match_all для извлечения файлов cookie. Затем используйте strpos, чтобы найти первое появление «=». Некоторые сайты используют кодировку и включают «=», которые не будут работать с «взрывом».

     $data = curl_exec($curl); $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); $header = substr($data, 0, $header_size); preg_match_all("/^Set-cookie: (.*?);/ism", $header, $cookies); foreach( $cookies[1] as $cookie ){ $buffer_explode = strpos($cookie, "="); $this->cookies[ substr($cookie,0,$buffer_explode) ] = substr($cookie,$buffer_explode+1); } 
  4. При создании следующего вызова curl повторно вызовите cookie var / object в CURLOPT_COOKIE.

     if( count($this->cookies) > 0 ){ $cookieBuffer = array(); foreach( $this->cookies as $k=>$c ) $cookieBuffer[] = "$k=$c"; curl_setopt($curl, CURLOPT_COOKIE, implode("; ",$cookieBuffer) ); } 

Это позволит вам сохранить неповрежденную последнюю переменную (т.е. сменить сеансы).

Надеюсь, это поможет любому, кто сталкивается с этой проблемой!