simplexml_load_file和$ _SESSION

时间:2010-02-27 09:14:44

标签: php session simplexml session-variables

我在PHP中使用simplexml_load_file和session vars时遇到了问题。

所以,我有2个PHP文件,一个生成一些XML,另一个读取它。 生成XML的文件应该读取一些已在另一个中设置的$ _SESSION变量,但它不会...

例如,假设第一个文件是:

FILE 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?
?>

FILE 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()

  • 在第一个文件中的simplexml_load_file之前调用session_write_close()

  • 使用fsockopen而不是simplexml_load_file访问文件。这也会返回一个空标记...所以这不是simplexml_load_file的问题......

我有点想法......有人可以帮忙吗?

由于 尼科

1 个答案:

答案 0 :(得分:2)

从用户/浏览器的角度来看,会话通过包含会话标识符的cookie从一个页面传递到另一个页面。

有点像这样:

  • 第1页创建会话并将包含其标识符的cookie发送到浏览器
  • 浏览器请求第2页并发送带有请求的cookie
  • 服务器看到那个cookie;它允许它加载会话
  • 第2页与cookie一起发送,将重新用于其他页面

这里有两个页面,但是会话标识符没有从文件1传递到文件2 - 这意味着文件2甚至不知道现有的会话。

事实上,你有两个客户,在这里:

  • 对于文件1,客户端是使用他的浏览器的人
    • 谁是会议
    • 的人
  • 对于文件2,客户端是文件1
    • 谁没有会话标识符
    • 因此,是另一个用户,他没有使用他的浏览器分享这个人的会话