0

我正在审查一个系统(一个旧系统),在某些情况下,它们使用 POST 方法以表单形式发送数据,但它们也向 url 发送参数,就像使用 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不是错字,只是西班牙语中的“会话”一词)

发生的情况是“ ”参数同时通过 url 和输入字段发送,因此,然后在数组和数组sesion中都接收到 'sesion' 变量。$_POST$_GET

为什么这是必要的,我应该这样吗?还是我可以将其从 url 中删除并仅依赖$_POST数据?

我已经在这个答案的评论中读到,从 GET 和 POST 发送数据是完全可能和有效的(尽管在这种情况下方法本身只是 GET 或 POST(或其他)是 POST,因为这就是方式形式定义)。现在在这种特定情况下,为什么有人要sesion通过 get(通过 url)和 post 请求发送相同的变量(即具有相同的值)?

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

另一件事是他们依赖“Register Globals”选项,因此,他们不是显式使用$_GET["sesion"]or $_POST["sesion"] (甚至$_REQUEST[]),而是在任何地方使用 '$sesion' 来使用该信息(对于请求中的任何其他变量也是如此)。再次,玩弄,我看到在这种情况下,变量的 POST 版本也优先。但我可以一直依赖它吗?

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

他们为什么要这样做而不是通过邮寄方式发送所有内容?在我看来,没有理由同时使用两者,特别是因为两者都具有相同的值。如果他们不这样做,他们可以选择使用哪个版本,但事实并非如此,我想不出其他任何东西,这只是他们留在那里并且从未“修复”过的东西

有哪些“现实生活”示例,其中有人需要将这种场景与 POST 和 GET 请求一起使用,特别是在两者中使用相同的变量名?

谢谢。

4

2 回答 2

2

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

For a real life scenario:

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

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

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

于 2013-08-09T19:27:40.913 回答
1

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

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

于 2013-08-09T19:30:19.373 回答