除了 $_REQUEST 读取 cookies 的事实之外,我是否应该使用 $_GET 和 $_POST 而不是 $_REQUEST?使用它们的理论和实践原因是什么?
当我只需要从用户那里获取特定数据并返回特定数据时,我使用 $_REQUEST。
永远不要在请求会产生副作用的情况下使用 $_REQUEST。产生副作用的请求应该是 POST(出于语义原因,以及基本的 CSRF 问题,虚假的 img 标签可以命中任何 GET 端点而用户甚至都不知道)。
当 GET 或 POST 到一个页面会产生不同结果时,应该使用 $_GET。
你已经给出了一个答案,所以我再给另外一个:
这更多是一种风格选择。例如,通常不希望服务器上的状态更改信息被缓存,因此可能需要将其限制为$_POST
变量。
使用 $_REQUEST 存在一些攻击向量,可能会在你不希望发生的地方被覆盖变量。
同时考虑GPC顺序(Get、Post、Cookie),$_REQUEST 的填充顺序也会受到影响。
例如,一个请求包含:
$_GET['foo'] = 'bar'
$_POST['foo'] = 'baz'
将导致
$_REQUEST['foo'] == 'bar'
HTTP GET的语义意味着用于获取页面,而POST可以被认为是在使用时,你期望某种状态会发生改变。
例如,使用相同参数多次进行GET操作应产生相同的结果,而使用POST则可能不会。
如果不在应该使用POST的情况下使用它,将会导致问题。我认为Ruby on Rails AJAX库使用GET而不是POST,当被网络爬虫访问时,导致了大量数据的丢失。
因此,您应该避免使用$_REQUEST。您应该知道页面的目的,并决定如何回答GET请求和POST请求。