Обработка нескольких запросов с использованием опции CURL CURLOPT_COOKIEFILE - PullRequest
4 голосов
/ 26 января 2011

Я использую CURLOPT_COOKIEJAR для хранения файлов cookie в файле и CURLOPT_COOKIEFILE для их извлечения из файла.

Мне интересно, что происходит, когда несколько пользователей получают доступ к сценарию нав то же время - не испортит ли он содержимое файла cookie?Кроме того, как мне управлять файлами cookie, чтобы одновременно иметь несколько пользователей?

Ответы [ 3 ]

3 голосов
/ 26 января 2011

CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE - это всего лишь утилиты для обработки файлов cookie, таких как веб-браузер. И это не рекомендуется для вашего случая.

Но вы можете напрямую поиграть с заголовками http для установки и получения файлов cookie.

Для установки ваших куки

<?php
curl_setopt($ch, CURLOPT_COOKIE, 'user=xxxxxxxx-xxxxxxxx');
?>

Для получения файлов cookie, просто укажите заголовки, которые начинаются с Set-Cookie:

Вы можете проверить этот документ, чтобы понять, как работают заголовки файлов cookie http://curl.haxx.se/rfc/cookie_spec.html

Пример использования, быстрый и грязный, но определенно не стандартный .

С этими заголовками

<?php
$header_blob = '
Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/
Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammo
';

Извлечение заголовков файлов cookie

$cookies = array();
if (preg_match_all('/Set-Cookie:\s*(?P<cookies>.+?);/i', $header_blob, $matches)) {
    foreach ($matches['cookies'] as $cookie) {
        $cookies[] = $cookie;
    }
    $cookies = array_unique($cookies);
}
var_dump($cookies);

Переслать печенье

$cookie_blob = implode('; ', $cookies);
var_dump($cookie_blob);
3 голосов
/ 26 января 2011

Вам нужно будет указывать разные файлы для каждого выполнения скрипта, иначе у вас возникнут проблемы с перезаписью файла и т. Д., Как вы предлагаете.

Возможно, вы захотите посмотретьв tempnam (пример ниже) в качестве средства генерации уникального файла или просто используйте uniqid и т. д. и создайте файл самостоятельно.

<?php
    session_start();
    $cookieFilePath = $_SESSION['cookiefilepath']
                         ? $_SESSION['cookiefilepath']
                         : tempnam(sys_get_temp_dir(), session_id().'_cookie_');
    $_SESSION['cookiefilepath'] = $cookieFilePath;
    ...
    curl_setopt($curlSession, CURLOPT_COOKIEFILE, $cookieFilePath);
    ...
?>

Тем не менее, вам нужно убедиться, что вы удалите эти файлы, когда они больше не нужны.(Если это не в пределах срока действия вашего скрипта, вы можете периодически запускать скрипт tidy-up через cron, который использует filemtime или аналогичный.)

Между прочим, Вы можете просто указать полный путь к файлу, который вы хотите использовать - он не обязательно должен находиться в том же каталоге, в котором находится скрипт, несмотря на то, что сказано в существующем Может кто-нибудь объяснить CURL cookieобработка (PHP)? вопрос.

1 голос
/ 26 января 2011

Несколько запросов перезаписывают один и тот же файл (но, вероятно, также замедляют выполнение всех других запросов из-за блокировки файла).

Вы можете включить session_id() в файл cookieимя, поэтому у вас будет один файл cookie для каждого сеанса клиента.Я бы также порекомендовал хранить файлы как-то вроде sys_get_temp_dir().

что-то вроде:

$cookieFile = sys_get_temp_dir().PATH_SEPARATOR.session_id().'-cookies.txt';

Должно работать нормально для этого.

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