代码之家  ›  专栏  ›  技术社区  ›  Deluxe

php-foreach影响会话值

  •  2
  • Deluxe  · 技术社区  · 16 年前

    foreach循环如何影响会话变量?

    session_start();
    $_SESSION[test] = "Session content";
    echo $_SESSION[test].'<br />';
    
    $test_array = array("test", "array", "something", "array end");
    
    foreach($test_array as $test){
        echo $test.'<br />';
    }
    
    echo '<br />Session content after foreach: '.$_SESSION[test].'<br />';
    

    当我在一些Web主机上运行此代码时,它的输出是正常的。

    Session content
    test
    array
    something
    array end
    
    Session content after foreach: Session content
    

    但仅在第一次执行时(创建会话时)。当我第二次执行此代码(会话已创建)时,其输出如下:

    Session content 
    test 
    array 
    something
    array end
    
    Session content after foreach: array end
    

    我不知道变量$test如何影响$\u会话[test]。

    1 回复  |  直到 16 年前
        1
  •  13
  •   cletus    16 年前

    我敢打赌你使用的是寄存器全局变量,这意味着如果你有一个名为 test 它将成为一个名为 $test 当你执行 session_start() . 然后循环更改 美元测试 ,这是对会话变量的全局引用。

    Using Register Globals 以及 register_globals directive .

    基本上这是一个很好的教训,为什么你不应该使用寄存器全局变量。在这种情况下,名称冲突可能是无害的,但这样可能会造成巨大的问题,甚至是攻击的漏洞。

    推荐文章