【发布时间】:2014-03-18 20:31:49
【问题描述】:
<?php
session_start();
$id = 'dd';
print_r($_SESSION);
?>
当我转到此页面时,变量 $_SESSION['id'] 被定义为一个数字。但是在此页面上,我定义了变量 $id,然后当我打印 $_SESSION 时,它已将变量 $_SESSION['id'] 更改为 'dd'。这怎么可能?
【问题讨论】:
<?php
session_start();
$id = 'dd';
print_r($_SESSION);
?>
当我转到此页面时,变量 $_SESSION['id'] 被定义为一个数字。但是在此页面上,我定义了变量 $id,然后当我打印 $_SESSION 时,它已将变量 $_SESSION['id'] 更改为 'dd'。这怎么可能?
【问题讨论】:
您的代码只有两种方式可以按照说明工作:
1) 您已启用 register_globals,并且您的会话已经设置了 id 参数
这意味着您使用的是旧的 php 安装,和/或配置非常糟糕的安装。 Register_globals 几乎是 PHP 历史上最愚蠢的一个,谢天谢地,它已经从 PHP 的“现代”版本中被淘汰了。
2) 您事先创建了一个引用,例如
$_SESSION['id'] = 'foo';
$id =& $_SESSION['id']; // $id now points at the session variable
echo $id; // prints foo
$id = 'bar'; // also changes the session value, because of the referencing.
echo $_SESSION['id']; // prints 'bar', because of the referencing.
【讨论】:
你有register globals turned on。这会导致$id 的声明覆盖$_SESSION['id'],因为它们指向同一个地方。
您应该将其关闭,因为它已被弃用,并且可能会导致您遇到的问题。
【讨论】: