我的一个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 :(得分:8)
显然,会话变量被注册为全局变量。
答案 1 :(得分:7)
闻起来像register_globals
如果您无法修改php.ini
文件,可以在.htaccess
文件中停用此设置,如here所述
答案 2 :(得分:2)
可能的一个原因是你写过的地方
$_SESSION['passcode']=&$passcode;
答案 3 :(得分:2)
会话变量可以配置为全局变量处理,因此可以通过$_SESSION["passcode"]
和$passcode
进行访问。检查你的PHP配置(register_Globals)
答案 4 :(得分:-1)
更改变量的名称
$passcode
到别的地方。?