关于$ _REQUEST的问题

时间:2010-07-04 12:29:02

标签: php global-variables

我是PHP的初学者,我在手册中读到$_REQUEST是一个由cookie,get和post数组组成的关联数组。我想知道哪个优先于请求数组。

假设,假设user以及$_POST中有变量$_COOKIE,如果我使用echo $_REQUEST['user']则会打印出来。我试过了,我得到了$_POST中设置的值。如果我想打印$_COOKIE我应该使用的值?我知道$_COOKIE在那里,但如果我想要打印它仍然使用$_REQUEST,那我该怎么做呢?

提前致谢:)

7 个答案:

答案 0 :(得分:4)

来自$_REQUESTphp.net)的PHP手册:

  

注意:$ _REQUEST中的变量是   通过GET提供给脚本,   POST和COOKIE输入机制和   因此可以修改   远程用户,不可信任。该   列出的变量的存在和顺序   在这个数组中根据定义   PHP variables_order配置   指令。

事实上,PHP使用request_order配置值,但如果为空,则会返回variables_order

请求或变量订单的可能值可能如下所示:"GPC"。这意味着首先将所有Get变量关联起来,然后将Cookie变量关联到Post后。顺序是从左到右,已定义的值被覆盖。除了GET,POST和cookie值,PHP还可以关联环境("E")和服务器("S")变量。

您将找到PHP配置here的相应手册条目。

答案 1 :(得分:3)

http://www.php.net/manual/en/ini.core.php#ini.request-order

  

该指令描述了PHP将GET,POST和Cookie变量注册到$ _REQUEST数组中的顺序。注册从左到右完成,较新的值覆盖较旧的值。

     

如果未设置此指令,则variables_order用于$ _REQUEST内容。

     

请注意,出于安全考虑,默认分发php.ini文件不包含Cookie的“C”。

答案 2 :(得分:2)

这取决于。有一个名为request_order的设置。

答案 3 :(得分:1)

来自$ _REQUEST手册页:

$ _REQUEST中的变量通过GET,POST和COOKIE输入机制提供给脚本,因此可以被远程用户修改并且不可信任。此数组中列出的变量的存在和顺序是根据PHP variables_order配置指令定义的。

答案 4 :(得分:1)

请参阅:

variable order on official docs

注意 出于安全原因,您应始终避免使用$_REQUEST,而应使用实际数组,例如$_GET$_POST$_COOKIE

答案 5 :(得分:1)

只需执行一个print_r($_REQUEST),你会看到,因为它是一个关联数组,每个键只能有一个值。因此,如果在POST,GET和COOKIE上使用相同的键,则数组中只有一个值,因此您无法从$ _REQUEST数组中获取其他值。在这种情况下,你必须使用$ _COOKIE超级全局。

答案 6 :(得分:0)

你真的不应该使用$ _REQUEST而应该是个人GLOBALS

echo $_POST['user'];
echo $_COOKIE['user'];
echo $_GET['user'];

这将为您的应用添加额外的安全层