PHP - foreach影响会话值

Del*_*uxe 2 php foreach session

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 />';
Run Code Online (Sandbox Code Playgroud)

当我在一些Web主机上运行此代码时,其输出正常.

Session content
test
array
something
array end

Session content after foreach: Session content
Run Code Online (Sandbox Code Playgroud)

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

Session content 
test 
array 
something
array end

Session content after foreach: array end
Run Code Online (Sandbox Code Playgroud)

我不知道变量$ test如何影响$ _SESSION [test].

cle*_*tus 13

我敢打赌你正在使用注册全局变量,这意味着如果你有一个名为的会话变量test,它将成为$test你执行时命名的全局变量session_start().然后,您的循环将更改值$test,该值是对会话变量的全局引用.

请参见使用Register Globalsregister_globals指令.

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