标题中的问题。
会发生什么的时候$_GET[foo]
,$_POST[foo]
和$_COOKIE[foo] exist?
所有3,其中一人被纳入到$_REQUEST?
标题中的问题。
会发生什么的时候$_GET[foo]
,$_POST[foo]
和$_COOKIE[foo] exist?
所有3,其中一人被纳入到$_REQUEST?
我从来不会说。
如果我想要的东西通过各种方法来设置,我的代码为他们每个人来提醒自己,我做这些是这样 - 否则你可能有事情都是没有意识到改写结束。
它不应该像这样工作:
$ _GET =非破坏性操作(排序,记录动作,查询)
$ _ POST =破坏性操作(删除,更新)
$ _COOKIE =琐碎的设置(样式喜好等)
$ _SESSION =不平凡的设置(用户名,登录?,访问级别)
GET和POST方法的优点在于它们的意思是不同的目的。现在很少有Web应用程序以这种方式工作,但是... – 2008-09-20 09:38:02
当你不能确定的填充值,其中或当您在使用这两个并希望环POST和GET方法的所有值。
有时候您可能希望通过几种不同的方式调用相同的脚本。想到表单提交和AJAX调用。在大多数情况下,但是,it's最好是明确的。
另请参阅http://docs.php.net/manual/en/ini.core.php#ini.request-order了解如果存在名称冲突,变量的不同来源将如何相互覆盖。
$_REQUEST
只是一个快捷方式,以防止您测试帖子,获取和烹饪,如果数据可能来自任何这些。
有一些缺陷:
$_REQUEST
。不过,如果你知道你在做什么,那么它只是一个方便的PHP伎俩。
我会使用它,如果我想快速更新变种可能来自几个方面。 E.G:
要检查是否不管方式会话ID的会话仍活跃传输。
我使用POST时,我不希望人们轻松访问正在传递的内容,并且我使用GET的时候不介意他们在url中查看值。我通常不会使用cookies,因为我发现SESSION对于持久化值是没问题的(尽管有一个正确的注册表是最好的方式来利用它)。
要回答“所有3存在时会发生什么”的问题,答案是“这取决于”。
PHP自动在PHP.INI中基于request_order指令填充$ _REQUEST(如果request_order不存在,则为variables_order)。默认情况下通常是“GPC”,这意味着GET首先被加载,然后加载POST(如果发生冲突,则覆盖GET),然后加载cookie(如果发生冲突,则覆盖get/post)。但是,您可以在PHP.INI文件中更改此指令。例如,将其更改为“CPG”会使cookie首先加载,然后发布,然后获取。
至于何时使用它?我会回应“从不”的观点。你已经不相信用户,为什么要给用户更多的工具?作为开发者,你应该知道你期望数据来自哪里。这都是关于减少你的攻击面积。
根据php.ini中的gpc_order,变量会被覆盖,你也应该用引号访问你的变量,像这样:$ _GET ['foo'] – 2009-08-13 12:13:23