file_get_contents (или завиток или fopen) с данными сеанса

У меня есть страница, которая показывает значение из сеанса, позволяет называть его www.domain-a.com/master.php, и если я набираю его непосредственно из браузера, он показывает мне значение сеанса.

но когда я пытаюсь загрузить его с помощью file_get_contents (или другого метода) из другого домена, например, www.domain-b.com/slave.php, он не извлекает содержимое, защищенное сеансом, просто пустую страницу.

Я знаю, это потому, что сервер-б пытается получить контент, а не пользователь …

кто-нибудь знает, как сообщить домену – кто-то, кто получает информацию, является пользователем? есть способ получить значение сеанса?

С уважением,

josé

Существует одно полезное решение.

Отправка PHPSESSID на другой сервер не имеет смысла, поскольку данные сеанса хранятся в файле на сервере, и именно поэтому file_get_contents блокирует HTTP-сервис. Это просто. Клиент подключается к серверу с помощью http, а сервер открывает файл с данными сеанса для записи, конечно. file_get_contents создать другое соединение (другой поток), который подключается к тому же серверу. Если задан идентификатор сеанса, сервер открывает тот же файл с данными сеанса, но этот файл уже открыт.

поэтому это хорошее решение, которое предотвращает это столкновение:

$opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Accept-language: en\r\n" . "Cookie: ".session_name()."=".session_id()."\r\n" ) ); $context = stream_context_create($opts); session_write_close(); // this is the key $obsah = file_get_contents( 'http://blablabla.cz', false, $context); 

он отлично работает. Да, да, да

Вероятно, вам нужно отправить идентификатор сеанса пользователя в файл cookie вместе с запросом.

Если вы хотите использовать функцию file_get_contents , вам нужно создать контекст для настройки файла cookie:

 $opts = array( 'http' => array( 'method' => 'GET', 'header' => 'Cookie: PHPSESSID=0123456789abcdef0123456789abcdef' ) ); $context = stream_context_create($opts); echo file_get_contents('http://master.example.com/master.php', 0, $context); 

имейте в виду, что если ваш код сеанса проверяет IP-адрес клиента, у вас могут все еще возникать проблемы, так как IP-адрес клиента, размещенный на вашей странице, будет отображаться на запрашивающем сервере (используя curl или file_get_contents) вместо клиентского браузера.

если у вас есть контроль над сайтом http://www.domain-a.com/master.php

то вы можете запрограммировать его таким образом, чтобы вы могли отправить его имя пользователя в зашифрованном виде и, например, master.php? user = zxcvert2324 или что угодно, и оно расшифровало бы и узнало, кто отправляет запрос.

В противном случае вам нужно будет заглянуть в CURL и создать сеанс, сначала запустив логин на этот сайт, а затем на следующий запрос перейдите на эту страницу master.php.

Возможно, ваши настройки PHP запрещают вам получать файлы через HTTP.

Возможные виновники:

  • Безопасный режим
  • Открыть
  • allow_furl_open

Вы должны иметь возможность извлекать контент с помощью curl. См. Этот ответ (возможно, вы можете удалить опцию spoof браузера).