simplexml_load_file и $ _SESSION - PullRequest
       12

simplexml_load_file и $ _SESSION

1 голос
/ 27 февраля 2010

У меня проблема с использованием simplexml_load_file и сессионных переменных в PHP.

Итак, у меня есть 2 PHP-файла, один генерирует некоторый XML, а другой читает его. Файл, который генерирует XML, должен читать некоторые переменные $ _SESSION, которые были установлены в другом, но это не будет ...

Например, скажем, первый файл выглядит примерно так:

ФАЙЛ 1 (читает XML)

<?
session_start();
$_SESSION['test'] = 'test!!!';
echo '<b>In file 1</b><br />';
echo 'var = '.$_SESSION['test'].'<br />';  // This correctly outputs "test!!!"
echo '<b>Reading file 2</b><br />';
$xml = simplexml_load_file("http://www.someurl.com/2.php");
echo 'var = '.$xml['var'];                 // This does <b>NOT</b> output "test!!!"... why?
?>

ФАЙЛ 2 (генерирует XML)

<?
header('Content-type:application/xml');
session_start();

echo '<?xml version="1.0" encoding="utf-8"?>';

echo '<test>';
echo '<var>'.$_SESSION['test'].'</var>';
echo '</test>';
?>

Странно то, что если я открываю файл 2 напрямую, он читает $ _SESSION ["test"]

Вещи, которые я уже пробовал (и не сработало)

  • Не вызывать session_start () во втором файле

  • Вызов session_write_close () перед simplexml_load_file в первом файле

  • Доступ к файлу с помощью fsockopen вместо simplexml_load_file. Это также возвращает пустой тег ... так что это не проблема с simplexml_load_file ...

Я немного не в себе ... Кто-нибудь может помочь?

Спасибо Nico

1 Ответ

2 голосов
/ 27 февраля 2010

С точки зрения пользователя / браузера сеанс передается со страницы на страницу через cookie, который содержит идентификатор сеанса.

Немного похоже на это:

  • страница 1 создает сеанс и отправляет cookie, содержащий его идентификатор, в браузер
  • браузер запрашивает страницу 2 и отправляет куки со своим запросом
  • сервер видит этот cookie; позволяет загружать сессию
  • страница 2 отправляется вместе с файлом cookie, который будет повторно использоваться для других страниц

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

На самом деле, у вас есть два клиента, здесь:

  • для файла 1, клиент - это парень, использующий свой браузер
    • кто тот сессию
  • для файла 2, клиент для файла 1
    • у которого нет идентификатора сеанса
    • следовательно, это другой пользователь, который не делится сессией парня, использующего его браузер
...