$ _POST和$ _SERVER ['REQUEST_METHOD'] =='POST'

时间:2011-08-22 14:16:57

标签: php post

我在我的PHP应用程序中使用了很多Ajax,并且通常路由POST请求进行处理我检查预期变量和值,并根据我处理脚本。

例如,如果我想使用AJAX删除或插入某些内容,我将处理POST请求的典型PHP文件就像

//Initialize the class on top of the page that will be dealing with CRUD functions.
$class = new CRUD();
//Delete Something
if(isset($_POST['option']) && $_POST['option'] == 'delete-something') {
    //Delete logic.
}
//Save Something
if(isset($_POST['option']) && $_POST['option'] == 'save-something') {
    //Save logic.
}

等等。我只是想知道代码if(isset($_POST['option']) && $_POST['option'] == 'delete-something')是否会保护我免受未经授权的请求。或者我应该在条件下使用$_SERVER['REQUEST_METHOD'] == 'POST'。这两者真的有什么区别吗?因为我看到很多开发人员使用$_SERVER['REQUEST_METHOD'] == 'POST'

3 个答案:

答案 0 :(得分:1)

如果HTTP请求它不是POST请求,$_POSTDocs将不会填充实际值,因此从技术上讲,如果您测试特定值,则无需检查请求是否为POST请求。

但是,您有时只想知道在$_POST超全局数组中没有测试具体值,因此检查服务器变量$_SERVER['REQUEST_METHOD']Docs是有意义的。

所以:这取决于你需要做的事情。

答案 1 :(得分:0)

嗯,至少,这样做......

if (isset($_POST['option']) && $_POST['option'] == 'delete-something')

...会在$_POST['option']不存在的情况下阻止通知。因此,即使使用isset($_POST['option']),您可能仍希望使用$_SERVER['REQUEST_METHOD'] === 'POST'

答案 2 :(得分:0)

  

我只是想知道代码if(isset($_POST['option']) && $_POST['option'] == 'delete-something')是否会保护我免受未经授权的请求。

当然没有。
我不明白为什么你认为它可以提供任何保护,你在“未经授权的请求”下的意思是什么。

  

我应该在条件下使用$_SERVER['REQUEST_METHOD'] == 'POST'吗?两者之间真的有什么不同吗?

不确定。 $_POST['option'] == 'delete-something'正在检查某个字段 $_SERVER['REQUEST_METHOD'] == 'POST'正在检查请求方法 你根本不能使用后者代替前者。我也不明白这个问题。