除$_REQUEST
从Cookie中读取内容外,我还有任何理由使用$_GET
和$_POST
代替$_REQUEST
吗?这样做的理论和实践原因是什么?
答案 0 :(得分:8)
除了$ _REQUEST从cookie中读取
之外
除了这是未定义的事实(它可以在每个安装级别配置),使用$_REQUEST
的问题是它过度简化了事情。 GET请求和POST请求之间存在(或应该)语义差异。因此,如果您从一个源或另一个源获得输入,那么它对您的应用程序很重要。这就是HTTP协议的定义方式,因此通过忽略它,您正在破坏协议,这使您的应用程序可以减少互操作性。它与使用语义HTML标记而不是面向表示的标记可以是相同的类型参数。或者更一般地说,遵循协议的意图而不是仅仅在具体情况下做任何工作。
答案 1 :(得分:8)
当我只是希望用户的某些数据返回某些数据时,我使用$ _REQUEST。
当请求有副作用时,切勿使用$ _REQUEST。产生副作用的请求应该是POST(出于语义原因,并且由于基本的CSRF原因,错误的img标记可以在没有用户知道的情况下命中任何GET端点。)
当对页面进行GET或POST会产生不同的结果时,应该使用$ _ GET。
答案 2 :(得分:5)
你已经给出了一个答案,所以我会给另一个答案:
这更像是一种风格选择。例如,您通常不希望在服务器上更改状态的信息是可缓存的,因此您可能希望将其限制为$_POST
个变量。
答案 3 :(得分:4)
$ _REQUEST的使用会向你的应用程序打开一些攻击向量,在这些向量中你可能会覆盖变量而不希望它发生。
还要考虑$ _REQUEST将被填充的订单GPC(Get,Post,Cookie)。
即。请求:
$_GET['foo'] = 'bar'
$_POST['foo'] = 'baz'
将导致
<强> $_REQUEST['foo'] == 'bar'
强>
答案 4 :(得分:2)
如果您对不同渠道上具有相同名称的值有不同的用途,那么它才有意义。在这种情况下,你应该重命名其中一些。
答案 5 :(得分:2)
HTTP GET在语义上意味着用于获取页面,而POST可以被认为在使用时,你会期望某种状态被改变。
例如,期望多次使用具有相同参数的GET产生相同的结果,而使用POST时,它们可能不会。
当你遇到问题时不使用POST。我认为Ruby on Rails AJAX库使用GET而不是POST,并且当被Web蜘蛛触及时会导致大量数据丢失。
因此,您应该避免使用$ _REQUEST。您应该知道页面的用途,并决定如何回答GET请求,以及如何回答POST请求。
答案 6 :(得分:0)
这是我刚发现的一个: When and why should $_REQUEST be used instead of $_GET / $_POST / $_COOKIE?。 对不起,我没有早点找到,所以我不会问这个问题......