为变量赋值会更改会话变量的值

问题描述:

我的一个PHP页面(运行在远程服务器上,据称安装了PHP 5.2),会收到带有一组“密码”键的POST请求,然后,最奇怪的事情可能会发生。在下面的代码中,POST请求的“密码”被重新定义,以便为你们更简单地进行价值跟踪,但是在测试中它仍然会产生注释中指示的超自然输出。为变量赋值会更改会话变量的值

$_POST["passcode"] = "hi"; 
$_SESSION["passcode"] = "hello"; 

echo $_SESSION["passcode"] . '<br />'; // prints "hello" 
$passcode = $_POST["passcode"]; 
echo $_SESSION["passcode"] . '<br />'; // prints "hi" 

编辑:所以看起来它是关于register_globals的。因此是另一个问题:

如果我没有权限访问服务器上的php.ini文件,是否有任何方法可以关闭此行为?

+0

在接收文件中只有那些结果,或者是通过整个现有代码? – MetalFrog

+0

@MetalFrog接收PHP文件的POST是目前为止我测试过的唯一地方。 –

+0

这很奇怪。
当你注释掉第五行时,它是否一样? –

闻起来像register_globals

如果你不能编辑php.ini文件,你可以在.htaccess文件中禁用此设置,如所描述here

+0

谢谢。但是这在我的帖子中诞生了另一个问题... –

+0

我已经更新了我的回答 – Mchl

显然,会话变量被注册为全局变量。

+0

也谢谢你们。 –

+0

不客气。对不起,我没有看到“另一个问题”:) –

一个可能的原因有可能是什么地方你写

$_SESSION['passcode']=&$passcode; 
+0

非常确定,我没有在我的代码中的任何地方做到这一点。 –

+0

然后会话变量被注册为全局变量......正如其他人告诉的那样...... –

会话变量可能被配置为作为全局变量处理,因此可以通过$_SESSION["passcode"]以及$passcode。检查你的PHP配置(REGISTER_GLOBALS)

改变变量

$passcode 

的名称到别的东西?

+3

我宁愿更改我的托管服务提供商而不是我的编程风格。 –