明凯博客

关注网站技术,一个特立独行的程序员

与$_SESSION的key值同名的变量会覆盖$_SESSION中key的值

有一次给客户做项目的时候发现与$_SESSION的key值同名的变量会覆盖$_SESSION中key的值。

例如:前一个页面$_SESSION[‘aaa’]=’bbb’;
然后声明变量$aaa=’ccc’;再打印$_SESSION[‘aaa’]的时候就变成了ccc。

后来查了一下谷歌,发现PHP配置register_globals = On的时候,定义的变量会改变同名的SESSION,改成 register_globals = Off即可。

我们来调试一下register_globals到底有什么用呢。

首先我们写出一段代码:

1
2
3
4
5
6
7
8
9
10
<form action='' method='get'>  
<input type='text' name='username' value='aimks' />  
<input type='submit' name='password' value='888'/>  
</form>  
< ?php    
echo 'username::',$username;    
echo '<br>sub::',$sub;    
echo '<br />GET::';    
print_r($_GET);   
?>

当register_globals = On的时候,程序运行提交输出结果为:

username::aimks
sub::888
array ( [username] => aimks [sub] => 888 )

当register_globals = Off的时候,程序运行提交输出结果为:

username::
sub::
array ( [username] => aimks [sub] => 888 )

通过测试结果,显而易见:register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。

经过测试,$_SERVER,$_ENV,$_FILES,$_COOKIE,$_POST,$_GET这些变量数组,全部会跟单独的变量重名出错,所以,我们有时候出错的时候可以改这个变量register_globals。

, ,

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注