在代码中:
<?php
session_start();
$_SESSION['id'] = 14;
if(isset($_GET['id']))
{
$id = $_GET['id'];
}
else
{
$id = $_SESSION['id'];
}
echo $id;
echo "<br>";
echo $_SESSION['id'];
?>
为什么回显的第二个值总是等于GET变量(假设有一个集合)?这是一个错误的配置还是我错过了什么?
答案 0 :(得分:6)
我的魔法水晶球表示您已启用register_globals设置。通过调用phpinfo()
当register_globals
开启时,$foo
和$_SESSION['foo']
彼此为references,但前提是$ foo位于全局范围内。这意味着为其中任何一个分配值,导致另一个更新。将它们视为完全相同的变量。
那个环境很古老。如果我没记错的话,$ foo和$ _SESSION ['foo']之间的引用只会在以下之一之后建立:
您应该强烈考虑禁用register_globals。像这样的意外程序行为是不鼓励设置的原因,最终完全从php中删除。