php CURL - несколько независимых сессий - нужна помощь! - PullRequest
3 голосов
/ 28 декабря 2010

Вот моя дилемма ... В основном у меня есть скрипт, который посредством CURL отправляет сообщения на сторонний веб-сайт для выполнения входа в систему, а затем делает еще одну публикацию для обновления сведений о пользователях на основе этого сеанса входа. Теперь, когда мой сайт становится занятым, у меня есть несколько пользователей, которые делают одно и то же, и иногда кажется, что curl запутывается и обновляет данные одного пользователя с информацией другого пользователя. Это вызывает реальные проблемы. Похоже, что файл cookie, который используется пользователем после одного входа в систему, используется другими пользователями, и они заканчивают тем, что входят в систему с тем же файлом cookie, что вводит в заблуждение стороннюю систему. Мой код опубликован ниже, и мне нужно использовать cookiefile и cookiejar для поддержки php-сессии, чтобы я мог делать то, что мне нужно. Но похоже, что один и тот же файл cookie используется всеми пользователями .... Имеет ли это смысл? Что я могу сделать, чтобы изменить это? Пожалуйста, порекомендуйте.... Большое спасибо!

Ниже приведен код, который я использую как для входа в систему, так и для публикации обновления пользователя

function hitForm($postURL, $postFields, $referer="", $showerr = FALSE, $ispost = TRUE) {
    global $islocal, $path_escape;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");

    curl_setopt($ch, CURLOPT_URL, $postURL);
    if ($ispost)
        curl_setopt($ch, CURLOPT_POST, 1);
    else
        curl_setopt($ch, CURLOPT_HTTPGET, 1);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $ret = curl_exec($ch);
    if ($error = curl_error($ch)) {
        if ($showerr)
            echo 'ERROR: ' . $error;
        return -1;
        exit;
    }
    $CU_header = curl_getinfo($ch);
    $CU_header["err"] = curl_errno($ch);
    $CU_header["errmsg"] = curl_error($ch);
    curl_close($ch);

    $returnout = $ret;

    //for debugging purposes for now we are logging all form posts
    SaveLog("hitform", "F[".$this->curruserid." - ".$this->currfunc." - ".date("d-m-y h:i:s")."]".$postFields);

    return $ret;
}

Ответы [ 4 ]

2 голосов
/ 28 декабря 2010

Вам необходимо использовать разные файлы cookie для каждого пользователя.

Я предполагаю, что ваши postFields содержат некоторый уникальный идентификатор для каждого пользователя (например, идентификатор пользователя или имя пользователя), поэтому попробуйте что-то вроде:

$cookie_file = 'cookies_' . $postFields['user_id'] . '.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
2 голосов
/ 28 декабря 2010

Вы используете общий файл cookie для всех пользователей.Каждому пользователю нужна отдельная банка cookie.

2 голосов
/ 28 декабря 2010

Вы используете один и тот же файл cookies.txt для каждой сессии, так что именно отсюда возникает проблема с общими cookie. Вам нужно будет указать отдельный файл для каждой параллельной сессии, которую вы хотите запустить.

0 голосов
/ 28 декабря 2010

Насколько я понимаю проблема, ваш скрипт получает неверную информацию о пользователе.Как вы храните информацию о пользователях в любом случае?

Я бы сказал, что это источник проблемы - вы не назначаете уникальный идентификатор информации о пользователях, и вот где она становится неприятной;)

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

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