【问题标题】:(PHP) Is handling a form submission on the same page more/less/equally good as handling on a separate page?(PHP)在同一页面上处理表单提交是否比在单独页面上处理更好/更少/同样好?
【发布时间】:2010-03-01 17:08:43
【问题描述】:

我有一个 PHP 表单,我想知道应该如何处理提交。我记得在学习 Rails 时,行为是为表单设置一个特殊的处理程序页面,然后将用户重定向到登录页面,这将防止用户通过点击后退按钮并返回到不小心重新提交数据表单提交页面。

对于我的 PHP 表单,为了避免此类错误(以及为了安全起见,但它可能会发挥作用),最好还是通过 post 将表单数据发送到处理页面,从而重定向用户?还是只在与表单相同的页面上处理表单数据可以吗?如果我做了后者,用户是否有可能通过回击/刷新/等意外重新提交数据?

【问题讨论】:

    标签: php forms


    【解决方案1】:

    Post-Redirect-Get 是推荐用于 web 表单的设计模式,以防止重新提交(以及您在 rails 中使用的内容)

    提交到同一个页面还是不同的页面并不重要,这是防止意外重新提交的重定向。因此,您可以根据您的编码风格和/或应用程序语义选择是发布到同一页面还是单独的页面。

    【讨论】:

      【解决方案2】:

      同样的原则也适用于 PHP。重定向可以帮助防止意外的表单刷新。但是,您仍然应该采取任何必要的预防措施来避免意外刷新造成的问题(例如,使用一次性令牌、验证输入等)。

      我使用我自己的 MVC 风格的框架,它只是让调度程序在每个页面视图上查找表单帖子并调用可以处理请求的适当控制器(假设满足仅提交一次的要求)。然后它将浏览器重定向到适当的登录页面。

      当然,您可以发布到同一个页面,但我认为这会导致不良做法,例如将过多的逻辑、html 和数据库访问混合在一起。

      【讨论】:

        【解决方案3】:

        我特别喜欢第三种方法。为了将逻辑与表示分离,我喜欢在每个需要某种处理(例如显示动态数据、处理 HTTP POST 请求等)的 HTML 文档中包含一个 PHP 文件。我一般将此文件存储在单独的目录中,并将其命名为“filename.page.php”。不用说,这只不过是一种编码约定,您可能想称它为其他名称。

        从某种意义上说,这意味着您在同一个文件中处理 HTTP POST 请求(至少就您的 Web 服务器而言)。不过,您仍然可以通过使用 HTTP Location 标头来重定向客户端,如下所示:

        header("Location: file.php")

        附带说明一下,我不会依赖 HTTP POST 来保证安全性。发出任意 HTTP POST 请求并不比 HTTP GET 请求难。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          相关资源
          最近更新 更多