如果我控制$ _POST的内容,会发生坏事吗?

时间:2011-04-01 22:58:33

标签: php forms post login

在我编写Web应用程序的日子里,我错过了一个简单的方法,让PHP脚本在传递数据而不使用URL

时指向另一个PHP脚本

浏览器可以使用$ _POST数组将数据无形地传递给PHP脚本。所以我正在设计一个脚本,将$ _SESSION [“POST”]的内容转储到$ _POST数组中以模仿发布数据的传递,然后清除$ _SESSION [“POST”]。

例如,页面X包含登录表单。页面X指向页面Y以验证数据。页面Y发现登录信息不正确,并重定向回第X页 - 现在显示错误消息“登录信息不正确”来自$ _POST。

我是否因为错过这个功能而疯狂?有没有其他方法可以轻松地做到这一点,我不知道?

请回复任何可能有用的内容。

2 个答案:

答案 0 :(得分:1)

您可以使用该会话。在第X页,您将数据放入会话中。在页面Y上,您将验证数据并处理重定向。您也可以将错误消息放入会话中。

会话在请求之间保持不变,因此它是存储此类数据的理想位置。

修改

好的,我会用会话变量做一些事情,但是如果你想避免这样做,除了张贴之外你还可以考虑其他几个选项:

  1. 您可以使用服务器上的文件(例如临时文件)。使用用户的会话密钥来识别他们的文件,您可以读取和写入您关心的任何数据。
  2. 您可以将数据放入数据库中。那也行。
  3. 当然这些都不是真正的帖子。如果你想要一个真正的帖子,你还有两个选择。

    1. 首先,您可以以隐藏的形式将数据返回到页面,并使用JavaScript来触发POST。这很简单,但它需要数据通过浏览器。这意味着您必须注意用户没有更改数据,并且用户必须启用JavaScript。您可以校验数据以确保数据未被修改,但JavaScript问题无法解决。

    2. 另一种方法是让用户完全脱离等式。当用户提交到页面A时,页面A可以对页面B进行POST,检查响应,然后将用户重定向到正确的位置。这就像你必须对第三方服务进行JSON或SOAP调用一样,除非你控制该服务。已经有一段时间了,但我相信HttpRequest是用来做这件事的类。

    3. 如果您检查的URL返回一个简单的答案(“true”,“false”,“yes”,“no”,“good”,“bad”,等等),那将是理想的,但只要你可以通过回答告诉他们是否成功,你可以做到。

      现在我应该注意到我同意mvds,这听起来像一个应该包含在页面A中的函数,以便它可以完成所有工作,但代码可以与其他页面共享。将页面A发布到页面B然后重定向到A或C似乎不必要地复杂。页面A可以轻松完成所有这些。我读了你对他的答案的评论,但似乎应该有另一种方法来实现这一点。

答案 1 :(得分:0)

摘要对函数和/或类执行的操作以及对这些kludges的需求将消失。具体:页面X和Y都可以调用相同的函数来验证发布的登录数据。

页面X重定向到页面Y进行验证意味着将控制权交还给客户端,而您可以(并且应该)立即验证数据。