Подтвердить что ты не робот

Как поддерживать сеанс в cURL в php?

как мы можем поддерживать сеанс в cURL?

i'am, имеющий код, отправляет данные входа в систему сайта и успешно регистрируется Мне нужно, чтобы сеанс поддерживался на сайте, чтобы продолжить.

вот мой код, который использовался для входа на сайт с помощью cURL

  <?php  
        $socket = curl_init();
        curl_setopt($socket, CURLOPT_URL, "http://www.XXXXXXX.com");
    curl_setopt($socket, CURLOPT_REFERER, "http://www.XXXXXXX.com");
    curl_setopt($socket, CURLOPT_POST, true);
    curl_setopt($socket, CURLOPT_USERAGENT, $agent);
    curl_setopt($socket, CURLOPT_POSTFIELDS, "form_logusername=XXXXX&form_logpassword=XXXXX");
    curl_setopt($socket, CURLOPT_COOKIESESSION, true);
    curl_setopt($socket, CURLOPT_COOKIEJAR, "cookies.txt");
    curl_setopt($socket, CURLOPT_COOKIEFILE, "cookies.txt");
    $data = curl_exec($socket);
    curl_close($socket); 
   ?>
4b9b3361

Ответ 1

Вот лучший способ найти ссылку :

текст ниже - ремиксная версия содержимого blogpost:

 $useragent = $_SERVER['HTTP_USER_AGENT'];
 $strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';

session_write_close();

$ch = curl_init();
$ch = curl_init($rssFeedLink); 
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERAGENT, $useragent);
curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );

$response = curl_exec($ch); 
curl_close($ch); 

Что делает session_write_close()? Он завершает текущий сеанс и сохраняет данные сеанса. По-видимому, PHP не нравится, когда несколько скриптов играют с сеансом, поэтому он блокирует его. Помещение session_write_close гарантирует, что ваш текущий сеанс будет сохранен, чтобы вы могли его загрузить и использовать.

если вы не используете session_write_close(), вместо использования текущего идентификатора сеанса будет создан новый идентификатор сеанса.

Также PHPSESSID следует заменить именем переменной сеанса. Согласно рекомендациям OWSAP, это должно быть нечто более общее, например anId.

Иногда вам нужно отправить пользовательский агент с сообщением, поэтому я включил параметр CURLOPT_USERAGENT.

Ответ 2

Вот как вы делаете CURL с сеансами

//initial request with login data

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php');
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=XXXXX&password=XXXXX");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name');  //could be empty, but cause problems on some hosts
curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp');  //could be empty, but cause problems on some hosts
$answer = curl_exec($ch);
if (curl_error($ch)) {
    echo curl_error($ch);
}

//another request preserving the session

curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/profile');
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, "");
$answer = curl_exec($ch);
if (curl_error($ch)) {
    echo curl_error($ch);
}

Я видел это на ImpressPages

Ответ 3

Поскольку вы ссылаетесь на файл cookie.txt без какой-либо ссылки на папку, я предполагаю, что вы пытаетесь записать файл в папку, недоступную для записи. Поэтому сначала проверьте, действительно ли вы нашли файл cookie.txt, и если он содержит файлы cookie сеанса, которые вы ожидаете.

Ответ 4

Я бы, вероятно, переместил этот код в функцию. После успешного входа в систему теперь у вас есть сеанс, связанный с файлом cookie, который у вас есть в файле cookie.txt. При последующих запросах просто продолжайте использовать этот файл cookie, и у вас должен быть действительный сеанс на этом сайте.