Вход cURL не устанавливает cookie в браузере

Я уверен, что это очень простая «проблема», которая полностью заключается в моем недостатке знаний.

Я занимаюсь исследованием и тестированием уже несколько часов, и я не могу найти исправление, которое хочу.

Ситуация:

У меня есть две части веб-приложения - внешний интерфейс Wordpress и внутренний интерфейс CodeIgniter. Когда кто-то входит в Wordpress, мне нужно, чтобы он также регистрировал их в CodeIgniter.

У меня уже есть код для запуска POST-запроса curl к функции входа в систему CodeIgniter.

Система Codeigniter использует файлы cookie для сохранения состояния входа в систему.

Проблема:

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

$this->session->set_userdata($userdata);

var_dump($this->session->userdata('username'));

Как только приведенный выше код запускается, как часть сценария, в который отправляется сценарий cURL, правильное имя пользователя для этого пользователя выгружается.

Новое понимание

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

Любые идеи?

Спасибо!


person Craig Hooghiem    schedule 18.05.2011    source источник


Ответы (1)


Вы должны понимать, что CURL работает на сервере. Если вы специально не принимаете меры для передачи файла cookie обратно пользователю, браузер пользователя НЕ участвует никоим образом/в форме/форме в этом запросе на завивание.

Кроме того, если сценарий CURL на вашем сервере ДЕЙСТВИТЕЛЬНО отправляет файл cookie codeigniter, источником файла cookie будет сервер, содержащий сценарий curl. Если ваш код codeigniter находится на другом хостинге (и особенно в другом домене), он НЕ БУДЕТ РАБОТАТЬ — помните, что куки привязаны к сайту, который их выдал. Что касается браузера, этот сайт является сервером скрипта curl.

С точки зрения реального мира, это все равно, что послать кого-то в магазин за пивом. Вы получаете пиво, но камера безопасности магазина увидит только того человека, которого вы послали, и в их кассовом аппарате будет записана дебетовая/кредитная карта этого человека, а не ваша.

person Marc B    schedule 18.05.2011
comment
Вот чего я боялся. При этом есть ли лучшее решение, чем cURL, для одновременного входа в систему? - person Craig Hooghiem; 18.05.2011
comment
Если WP и CI работают на одном сервере, вы МОЖЕТЕ извлечь файл cookie CI из ответа curl и отправить его через обычный setCookie() в ответе скрипта клиенту. Так как это все на одном сервере, должно работать. Если они находятся на разных доменах/хостах, вы, скорее всего, S.O.L. - person Marc B; 18.05.2011
comment
Они на одном сервере. В корне находится WP, а CI находится в подкаталоге /app. Я думаю, я посмотрю на это больше. - person Craig Hooghiem; 18.05.2011
comment
@MarcB нет никаких причин, по которым расширение браузера не могло бы правильно установить файлы cookie на основе cookiejar из curl. Теперь, возможно, они добавили некоторые функции безопасности, чтобы предотвратить это, но всегда есть способ;) - person Morg.; 21.06.2013
comment
@morg: расширение, позволяющее устанавливать файлы cookie с произвольных доменов, было бы кошмаром для безопасности. nastycriminals.ru подрывает плагин, чтобы возиться с вашими файлами cookie bankofamerica.com? спасибо, но это расширение НИКОГДА не приблизится к моим компьютерам. - person Marc B; 22.06.2013
comment
@MarcB эй, я только что сказал, что это возможно ;) - и я думаю, что так и должно быть. Кстати, ваш пример неверен, в реальных условиях вы бы дали им свою банковскую карту, свой пин-код, и они вернулись бы с деньгами. Как мы уже говорили, это вопрос доверия. - person Morg.; 22.06.2013