PHP:同时使用GET和POST请求的原因?

时间:2013-08-09 19:17:24

标签: php request http-post httprequest http-get

我正在审查一个系统(旧系统),在某些情况下,他们使用POST方法以表格形式发送数据,但他们也会将参数发送到网址,就像使用get一样。

类似的东西:

echo "\n<FORM METHOD='POST' NAME='onegroup' ACTION='menu.php?sesion=".$sesion."' >
    <INPUT TYPE='HIDDEN'    NAME='sesion'   VALUE='".$sesion."'>
    <INPUT TYPE='HIDDEN'    NAME='index_login'   VALUE='1'>
[...]   
</FORM>\n";

(注意,sesion不是拼写错误,只是西班牙语中的“会话”一词)

sesion”参数是通过url和输入字段发送的,因此,'sesion'变量随后在$_POST数组和{{}中被接收1}}数组。

为什么这是必要的,我应该这样离开吗?或者我可以将其从网址中取出并仅依靠$_GET数据?

我在this回答的评论中读到,从GET和POST发送数据是完全可能和有效的(尽管在这种情况下该方法本身只是GET或POST(或其他) POST,因为这是表单定义的方式)。现在在这个特定的情况下,为什么有人想通过get(通过url)和发布请求发送SAME $_POST变量(即具有相同的值)?

在我的menu.php脚本中可以读取sesion$_POST,每个都有变量的“版本”,但它恰好相同。 我也玩过,看到如果不是$ _POST或$_GET我读了$_GET数组,我将所有变量放在一起,但是在重复的情况下({{1} }),post版本优先。

另一件事是他们依赖于“注册全局”选项,因此,他们不是明确使用$_REQUESTsesion(甚至是$_GET["sesion"]),而是使用'$ sesion '到处使用该信息(对请求中的任何其他变量都是一样的)。再次,玩,我看到在那种情况下,变量的POST版本也优先。但我可以一直依赖吗?

我应该只使用post方法并从网址中删除参数吗?

他们为什么要这样做,而不是只是通过邮寄发送一切?正如我所看到的,没有理由同时使用两者,特别是因为两者都具有SAME值。如果他们没有,他们可以选择使用哪个版本,但情况并非如此,我不能想到其他任何东西,只是他们离开那里而从未“修复”

有哪些“真实”的例子,有人需要在POST和GET请求中使用这种场景,特别是在两者中使用相同的变量名称?

感谢。

2 个答案:

答案 0 :(得分:2)

如果值相同,您应该删除其中一个(最好是GET)。但是,您还需要确保对表单处理逻辑进行相应的更改,以便代码获得预期的值。最好使用$ _POST或$ _GET代替$ _REQUEST,因为这样你就明确了要传递的值以及代码期望的值。例如,如果您使用$ _REQUEST,那么您的POST值可能会被GET覆盖,这可能是一个安全问题。此外,依赖寄存器全局变量并不是一个好主意,因为这可能会导致安全问题,加上寄存器全局开/关设置可能因服务器而异。至于为什么会有人这样做,可能是错误或缺乏关于PHP GET / POST工作方式的知识。

For a real life scenario:

对于我的许多应用程序,我使用会话并将URL session_id作为页面中URL的GET参数传递。每个页面还有一个“verify.php”,用于验证会话并检查用户是否已登录。如果我正在处理表单,那么我只需创建表单并将操作部分指定为:

action="form_submit_page.php?SID=<?php echo Session_ID(); ?>"

表单将值从一个页面传递到另一个页面作为POST,而操作部分将会话作为GET传递。

答案 1 :(得分:1)

我使用查询sting参数(GET)来选择活动页面和POST值来携带表单数据。这是一个合法的用例。

如果数据是重复,则终止GET。