Осуществление сеанса file_get_contents () в PHP - PullRequest
3 голосов
/ 25 февраля 2009

Преамбула: в моем приложении включен mod_rewrite, и у меня есть страница index.php, которая загружает различные страницы на основе Request_URI и печатает их как содержимое страницы.

Проблема: Функция File () или File_get_contents () отлично подходит для загрузки других страниц моего приложения. Но как только я пытаюсь использовать его для загрузки страницы с включенной сессией , у меня возникают проблемы.

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

  $url = "http://localhost/EmplDir/AdminMenu.php";
  return implode('',file($url. "&" . session_name() . "=". session_id()));

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

P.S. Сказанное выше справедливо как для Windows, так и для Linux.

Ответы [ 3 ]

3 голосов
/ 25 февраля 2009

Вы не отделили строку запроса от остальной части URL с помощью?

Попробуйте

return file_get_contents($url. "?" . session_name() . "=". session_id());

Вам также необходимо убедиться, что сервер не использует настройку конфигурации session.use-only-cookies .

Нет причины, по которой скрипт не должен видеть строку запроса и действовать на нее, вы можете убедить себя, написав скрипт, который просто выполняет var_dump ($ _ GET) и запрашивая его, как указано выше. Если вы видите аргументы запроса в выходных данных, вам просто нужно отладить ваш скрипт, чтобы понять, почему он не работает должным образом с учетом идентификатора сеанса.

ПРИМЕЧАНИЕ. Я предполагаю, что вы хотите запросить файл в том же домене, что и ваше приложение, в противном случае использование идентификатора сеанса для удаленного сайта не очень много значит .

2 голосов
/ 25 февраля 2009

Если ваш скрипт не изменяет суперглобальных переменных , вы можете просто включить его:

ob_start();
include $_SERVER['DOCUMENT_ROOT'].'/EmplDir/AdminMenu.php';
return ob_get_clean();
0 голосов
/ 25 февраля 2009

session_name и session_id дает вам текущий сеанс сценариев; Не удалить сервер. Вам нужно использовать что-то, что понимает http. Curl подойдет, или вы можете использовать что-то вроде SimpleBrowser , которое полностью эмулирует браузер.

...