Answers:
$_REQUEST
默认情况下,包含的内容$_GET
,$_POST
和$_COOKIE
。
但这只是默认值,具体取决于variables_order
;并且不确定您要使用Cookie。
如果必须选择,我可能不会使用$_REQUEST
,而是根据我的应用程序应该做的事情(即,一个或另一个,但不能同时选择两个)来选择$_GET
或$_POST
- :一般而言:
$_GET
当有人从您的应用程序请求数据时,您应该使用。$_POST
的时候有人推(或删除插入或更新)数据到您的应用程序。无论哪种方式,性能都不会有太大区别:与脚本的其余部分相比,这种区别可以忽略不计。
GET与POST
1)GET和POST都创建一个数组(例如array(key => value,key2 => value2,key3 => value3,...)。该数组包含键/值对,其中键是表单控件的名称,值是来自用户的输入数据。
2)GET和POST都被视为$ _GET和$ _POST。这些是超全局变量,这意味着它们始终可以访问,而不管作用域如何-您可以从任何函数,类或文件访问它们,而无需执行任何特殊操作。
3)$ _GET是通过URL参数传递给当前脚本的变量数组。
4)$ _POST是通过HTTP POST方法传递给当前脚本的变量数组。
什么时候使用GET?
使用GET方法从表单发送的信息对所有人都是可见的(所有变量名和值都显示在URL中)。GET对发送的信息量也有限制。限制约为2000个字符。但是,由于变量显示在URL中,因此可以将页面添加为书签。在某些情况下这可能很有用。
GET可用于发送非敏感数据。
注意:绝对不要将GET用于发送密码或其他敏感信息!
什么时候使用POST?
使用POST方法从表单发送的信息对于其他人是不可见的(所有名称/值都嵌入在HTTP请求的正文中),并且对要发送的信息量没有限制。
此外,POST支持高级功能,例如在将文件上传到服务器时支持多部分二进制输入。
但是,由于变量未显示在URL中,因此无法为页面添加书签。
$ _GET从查询字符串或您的URL中检索变量。
$ _POST从POST方法中检索变量,例如(通常)形式。
$ _REQUEST是$ _GET和$ _POST的合并,其中$ _POST覆盖$ _GET。可以在自引用表单上使用$ _REQUEST进行验证。
GET
从查询字符串POST
到表单提交)。
使用请求。没有人关心这种简单操作的速度,而且它的代码更简洁。
$_REQUEST
是错误的结论。看我的答案。
不用担心 但是,您仍然应该使用第二种解决方案(对所有这些变量都不存在进行额外检查),因为存在安全问题$_REQUEST
(因为$_GET
并且$_POST
不是该数组的唯一来源)。
$_REQUEST
我相信昨天有一篇关于昨天问题的文章。我去找吧
编辑:哦,好吧,不是直接发布,而是在这里:http : //kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
使用它是因为它更安全并且不会造成明显的速度差异
$_REQUEST
但仍然允许以任何一种方式访问同一脚本(在我的情况下,同一脚本用于不同的“操作”,有时$ _GET可以,但是有时我需要$ _POST以隐藏/保护数据)。
由于黑客可以设置将覆盖$ _POST或$ _GET值的cookie,因此涉及某些安全问题。如果您处理敏感数据,则不建议使用$ _REQUEST。– Xandor
你不能使用$_GET
替代$_POST
一些情况。
什么时候 ??
GET
对发送的信息量也有限制。限制约为2000个字符。
其他情况很少有,您无法使用来检索数据 $_POST
什么时候 ?
休息服务
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
没有错用$_REQUEST
。
但是,这样做的方法是显式检查$ _SERVER ['REQUEST_METHOD'],而不是依靠$ _POST对于GET为空。
$_SERVER['REQUEST_METHOD']
用于检查脚本是否将被任一脚本调用的良好建议。但是说没有错$_REQUEST
不是100%正确。由于黑客可以设置将覆盖$ _POST或$ _GET值的cookie,因此涉及某些安全问题。如果您处理敏感数据,则不建议使用$_REQUEST
。
$ _GET从查询字符串或您的URL中检索变量。
$ _POST从POST方法中检索变量,例如(通常)形式。
$ _REQUEST是$ _GET和$ _POST的合并,其中$ _POST覆盖$ _GET。可以在自引用表单上使用$ _REQUEST进行验证。
request_order
并且也可能包含cookie值,这就是为什么它不是一个非常可靠也不有用的功能的原因。
我将使用第二种方法,因为它更加明确。否则,您将不知道变量来自何处。
为什么仍然需要同时检查GET和POST?当然,只使用其中之一才有意义。
GET
仅用于一项(例如,将其移动),并且POST
用于多个项(带有复选框的表单...)。
我只使用_GET或_POST。我更喜欢控制。
我不喜欢OP中的任何代码片段,因为它们会丢弃有关使用哪种HTTP方法的信息。而且该信息对于输入卫生很重要。
例如,如果脚本从将要输入到数据库的表单中接受数据,则该表单最好使用POST(仅将GET用于幂等动作)。但是,如果脚本通过GET方法接收输入数据,则应该(通常)将其拒绝。对我来说,这种情况可能需要向错误日志中写入安全冲突,因为这是有人尝试尝试的标志。
使用OP中的任何代码片段,都无法进行这种清理。
$_POST
方法的最大优点是可以防止搜索引擎爬网程序执行以下操作:thedailywtf.com/Articles/WellIntented-Destruction.aspx
我会用$_POST
,$_GET
因为与$_REQUEST
它们的内容不同,它不受variables_order
。
什么时候使用$_POST
,$_GET
取决于执行哪种操作。更改从服务器处理的数据的操作应通过POST请求完成,而其他操作应通过GET请求完成。举个例子,删除用户帐户的操作不应在用户单击链接后直接执行,而可以通过链接查看图像。
您过早优化。另外,出于安全原因,您应该真正考虑是否应将GET用于正在发布的内容。
这很丑陋,在实时发布代码时,我不建议将其作为最终解决方案,但是在构建rest函数时,有时可以使用“ catch-all”参数捕获器:
public static function parseParams() {
$params = array();
switch($_SERVER['REQUEST_METHOD']) {
case "PUT":
case "DELETE":
parse_str(file_get_contents('php://input'), $params);
$GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
break;
case "GET":
$params = $_GET;
break;
case "POST":
$params = $_POST;
break;
default:
$params = $_REQUEST;
break;
}
return $params;
}
甚至可能有人添加了创意来处理命令行参数或来自IDE的任何东西。一旦确定了给定的休息功能在做什么,就可以为该给定的调用选择一个合适的功能,以确保获得所需的部署版本。假设设置了“ REQUEST_METHOD”。
!isset($_REQUEST['s'])
。