html — сохранение аутентифицированного сеанса с помощью входа в PHP

Это относится к предыдущему вопросу StackOverflow, учетные данные для входа, где Том Б. предложил использовать этот формат для входа через HTTP / HTTPS: username:[email protected],

Этот подход оставляет имя пользователя и пароль видимыми для любого, кто проверяет источник страницы.

Есть ли способ выполнить первоначальный вход в систему через PHP (возможно, CURL), а затем продолжить сеанс HTML? Я попробовал следующее, но по какой-то причине сеанс не сохраняется, что приводит к сбою исходящего HTML:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://url.xxx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "user:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
curl_close($ch);
include 'sessionPage.html';
?>

Этот формат тоже не работал:

curl_setopt($ch, CURLOPT_URL, 'http://user:[email protected]');

Как я могу выполнить успешный вход в систему через скрипт PHP и перенести сеанс на исходную HTML-страницу? Ресурс сторонний, поэтому я не контролирую информацию о сеансе.

Спасибо.

1

Решение

Вы можете использовать cookie-файл для хранения session_id успешного (ручного) входа в систему. Таким образом, сценарий curl будет казаться тем пользователем, который первым создал идентификатор сеанса.

сценарий скручивания

function get_data( $url ) {
$cookie = 'cookie.txt';
$ch = curl_init();
$timeout = 5;
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie );
$data = curl_exec( $ch );
curl_close( $ch );

return $data;
}

файл cookie (содержит только эту строку)

www.awebsite.com    TRUE    /   FALSE   0   PHPSESSID   5rsiasdfasdfasdfasdf73dvi9r0

чтобы получить идентификатор сеанса, войдите вручную на рассматриваемый сайт, просмотрите куки с помощью инструментов разработчика браузеров и скопируйте PHPSESSID, Очевидно, что при таком подходе вы ограничены необходимостью сначала получить session_id самостоятельно.

0

Другие решения

Возможно только если php работает на той же машине. По сути, вам нужно извлечь cookie из ответа cURL и, используя PHP, записать этот cookie в файловую систему в нужном месте, чтобы эмулировать успешный вход в систему. Все это при условии, что куки используются для аутентификации. Существуют и другие формы аутентификации: постоянные формы, sessionid в URL, по IP-адресу и т. Д.

0

По вопросам рекламы [email protected]