为变量赋值会更改会话变量的值
我的一个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文件,是否有任何方法可以关闭此行为?
闻起来像register_globals
如果你不能编辑php.ini
文件,你可以在.htaccess
文件中禁用此设置,如所描述here
谢谢。但是这在我的帖子中诞生了另一个问题... –
我已经更新了我的回答 – Mchl
显然,会话变量被注册为全局变量。
也谢谢你们。 –
不客气。对不起,我没有看到“另一个问题”:) –
一个可能的原因有可能是什么地方你写
$_SESSION['passcode']=&$passcode;
非常确定,我没有在我的代码中的任何地方做到这一点。 –
然后会话变量被注册为全局变量......正如其他人告诉的那样...... –
会话变量可能被配置为作为全局变量处理,因此可以通过$_SESSION["passcode"]
以及$passcode
。检查你的PHP配置(REGISTER_GLOBALS)
改变变量
$passcode
的名称到别的东西?
我宁愿更改我的托管服务提供商而不是我的编程风格。 –
在接收文件中只有那些结果,或者是通过整个现有代码? – MetalFrog
@MetalFrog接收PHP文件的POST是目前为止我测试过的唯一地方。 –
这很奇怪。
当你注释掉第五行时,它是否一样? –