2

在代码中:

<?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 变量(假设有一组)?这是配置错误还是我遗漏了什么?

4

1 回答 1

6

我的魔法水晶球说你打开了register_globals设置。通过调用检查它phpinfo()

何时register_globals打开,$foo并且$_SESSION['foo']是相互引用,但前提是 $foo 在全局范围内。这意味着为其中任何一个分配一个值,会导致另一个更新。将它们视为完全相同的变量。

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

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

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

于 2013-07-13T06:51:15.357 回答