标题中的问题。
当$_GET[foo]
,$_POST[foo]
和$_COOKIE[foo] exist?
中的所有3个被包含到$_REQUEST?
答案 0 :(得分:51)
我永远不会说。
如果我想通过各种方法设置某些东西,我会为每个方法编写代码以提醒自己我是这样做的 - 否则你最终可能会被覆盖而没有意识到。
它不应该像这样工作:
$ _ GET =非破坏性操作(排序,记录操作,查询)
$ _ POST =破坏性行为(删除,更新)
$ _ COOKIE =琐碎的设置(样式表首选项等)
$ _ SESSION =非常重要的设置(用户名,登录?,访问级别)
答案 1 :(得分:7)
有时您可能希望使用多种不同方式调用相同的脚本。我想到了表单提交和AJAX调用。然而,在大多数情况下,最好是明确的。
另外,如果存在名称冲突,请参阅http://docs.php.net/manual/en/ini.core.php#ini.request-order,了解不同的变量来源如何相互覆盖。
答案 2 :(得分:4)
$_REQUEST
只是阻止您测试帖子,获取和烹饪的快捷方式,如果数据可以来自其中任何一种。
有一些陷阱:
$_REQUEST
。然而,如果你知道自己在做什么,那么这只是另一个方便的 PHP 技巧。
如果我想快速更新可能来自多个来源的var,我会使用它。 E.G:
检查会话是否仍处于活动状态,无论会话ID的传输方式如何。
答案 3 :(得分:4)
要回答“当所有3个存在时会发生什么”的问题,答案是“它取决于。”
PHP在PHP.INI中根据request_order指令(或者如果request_order不存在则使用variables_order)自动填充$ _REQUEST。默认值通常是“GPC”,这意味着首先加载GET,然后加载POST(如果发生冲突则覆盖GET),然后加载cookie(如果发生冲突,则覆盖get / post)。但是,您可以在PHP.INI文件中更改此指令。例如,将其更改为“CPG”会使cookie首先加载,然后发布,然后加载。
何时使用它?我会回应“永远不会”的情绪。您已经不信任该用户,那么为什么要为用户提供更多工具呢?作为开发人员,您应该知道您希望数据来自何处。这都是为了减少攻击面积。
答案 4 :(得分:2)
如果您不确定填充值的位置或何时使用它们,并希望通过POST和GET方法遍历所有值。
答案 5 :(得分:1)
当我不希望人们轻松访问正在传递的内容时,我使用POST。当我不介意他们看到网址中的值时,我使用GET。我通常不会使用cookie,因为我发现SESSION对于持久化值很好(尽管使用适当的注册表是最好的方法)。