为什么“GET”覆盖“SESSION”

时间:2013-07-13 05:43:32

标签: php get

在代码中:

<?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变量(假设有一个集合)?这是一个错误的配置还是我错过了什么?

1 个答案:

答案 0 :(得分:6)

我的魔法水晶球表示您已启用register_globals设置。通过调用phpinfo()

进行检查

register_globals开启时,$foo$_SESSION['foo']彼此为references,但前提是$ foo位于全局范围内。这意味着为其中任何一个分配值,导致另一个更新。将它们视为完全相同的变量。

那个环境很古老。如果我没记错的话,$ foo和$ _SESSION ['foo']之间的引用只会在以下之一之后建立:

  1. 在调用session_start()之后立即在会话中存在IF $ _SESSION ['foo']。
  2. 在将任何值分配给$ _SESSION ['foo']
  3. 之后立即执行
  4. 在调用session_register('foo')
  5. 之后立即执行

    您应该强烈考虑禁用register_globals。像这样的意外程序行为是不鼓励设置的原因,最终完全从php中删除。