Задать вопрос
@gpetrov
web-программист

Авторизация на другом сайте с помощью PHP curl: как решить проблему с COOKIE?

Уважаемые коллеги!
Прошу помощи, наверное, я чего-то не понимаю.

Задача: с помощью PHP-скрипта автоматически авторизоваться на другом сайте и перейти на него (в браузере пользователя).

Т.е. юзер заходит на мой сайт, скрипт авторизации посылает информацию для авторизации на сторонний сайт, после чего перекидывает пользователя на этот сторонний сайт, где уже произведена авторизация с помощью определенного логина и пароля.

Делаю авторизацию при помощи curl.

Проблема: почему-то при выводе результатов в браузер с помощью echo авторизация срабатывает, но "теряется" при последующем переходе на этот сайт с помощью заголовка Refresh или Location

// URL скрипта авторизации на стороннем сайте
        $login_url = 'https://example.com/index.php?action=login2';
  
        // параметры для отправки запроса - логин и пароль
	    $post_data = array(
		    'user' => 'MYUSERNAME',
		    'passwrd' => 'MYPASSWORD',
		    'cookielength' => '-1',
		    'hash_passwrd' => ''
	    );
  
        // создание объекта curl
        $ch = curl_init();
  
        // используем User Agent браузера
        $agent = $_SERVER["HTTP_USER_AGENT"];
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  
        // задаем URL
        curl_setopt($ch, CURLOPT_URL, $login_url );
  
        // указываем что это POST запрос
        curl_setopt($ch, CURLOPT_POST, 1 );
  
        // задаем параметры запроса
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  
        // указываем, чтобы нам вернулось содержимое после запроса
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  
        // в случае необходимости, следовать по перенаправлени¤м
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  
        /*
            Задаем параметры сохранени¤ cookie
            как правило Cookie необходимы для дальнейшей работы с авторизацией
        */
  
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

  
        // выполняем запрос для авторизации
        $postResult = curl_exec($ch);
        
        curl_close($ch);

             // Если выводим результат работы curl на страницу через Echo, 
              // то показывает страницу с авторизованным пользователем (всё работает)
             // echo $postResult;

        // А если перекидываем пользователя на нужную страницу 
        //в браузере пользователя, то авторизация теряется, и мы видим "Привет гость"

        header( 'Refresh: 0; url=https://example.com/index.php' );


Почему авторизация срабатывает при выводе результатов в браузер, но "теряется" при переходе на этот сайт с помощью заголовка Refresh или Location? И как решить эту проблему?

Заранее огромное спасибо!
  • Вопрос задан
  • 5545 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
rpsv
@rpsv
делай либо хорошо, либо никак
Дак никак?

Вы не сможете поставить куки для другого домена.
А иначе авторизация не прокатит.

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

P.S. очень похоже на атаку "человек по середине", хм...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы