2012-03-08 59 views
3

我在IX虚拟主机托管,我遇到了一些让我感到奇怪的东西。我所有的$ _SESSION变量都被自动分配给一个同名的常规变量。这是正常的PHP行为?我在php.net手册中查了一下,没有找到答案。下面是一个示例脚本:PHP会话变量自动分配到常规变量

<?php 
$_SESSION['myvar'] = "hello"; 
echo $myvar; // after a page refresh, displays hello 

$myvar = "goodbye"; 
echo $_SESSION['myvar']; // displays goodbye 
?> 

在我的本地我不确定的变量喜欢得到一个错误信息:$ MYVAR,但在九,脚本作品!危险或正常的PHP行为?提前致谢。

+4

关闭'register_globals' – zerkms 2012-03-08 23:46:37

+4

@zerkms说什么。这就是为什么大家都喜欢PHP。 – 2012-03-08 23:47:12

+1

妈妈说PHP很酷。 – 2012-03-09 00:01:05

回答

3

这个“特征”由一个名为register_globals的php.ini指令控制。自PHP 4.2以来,它已被禁用,并在PHP 5.4中完全删除。

除非您有遗留代码,否则我会诚挚地建议您将关闭,如果您可以。完全可以说,安全影响非常重要。

+0

如果您无法关闭它,请考虑切换网络主机。 :P是的......这很糟糕。 – cHao 2012-03-09 00:05:53

+0

这是令人难以置信的糟糕。他们只提供关闭一个自定义cgi php.ini调用.htaccess文件...是否安全/足够高效? – 2012-03-09 09:11:18

+0

@bobdope只要您使用一个.htaccess文件关闭整个网站,它应该是一个完美的解决方案。当然,默认关闭会是一个更好的解决方案,如果您设置了另一个帐户,您必须记得再次执行相同的操作。 – 2012-03-09 09:18:43