在代码中:
<?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变量(假设有一个集合)?这是配置错误还是我遗漏了什么?
我的魔法水晶球说你打开了register_globals设置。通过调用phpinfo()
进行检查
当register_globals
处于启用状态时,$foo
和$_SESSION['foo']
是彼此的引用,但前提是$foo在全局范围内。这意味着为其中一个指定一个值,使另一个更新。把它们想象成完全相同的变量。
那个环境很古老。如果我没记错的话,$foo和$_SESSION['fo']之间的引用将只在以下之一之后建立:
- 在调用session_start()之后,如果会话中存在$_session['fo']
- 在将任何值分配给$_SESSION['fo']之后立即
- 调用session_register('o')后立即
您应该强烈考虑禁用register_globals。像这样的意外程序行为正是不鼓励该设置的原因,并最终从php中完全删除。