【问题标题】:How to prevent browser from refilling form data when navigating back导航返回时如何防止浏览器重新填充表单数据
【发布时间】:2010-08-08 23:25:43
【问题描述】:

我有一个将数据提交到数据库的 php 表单。当表单填写成功并提交数据后,由于页面刷新,表单会清空。当用户点击浏览器上的返回按钮时,数据就会返回。

是否有一个 php 函数可以防止缓存这些数据?

【问题讨论】:

  • 就我个人而言,如果我提交了您的表单,收到 HTTP 错误响应并点击 [Back] 只是为了看到您认为篡改我的历史数据和最后迫使我重新输入所有内容。

标签: php


【解决方案1】:

autocomplete="off" 在表单的输入字段中?

【讨论】:

  • 我认为问题不在于自动完成,而在于 POSTED 数据。当使用浏览器中的后退按钮时,此数据会重新出现在表单中。
【解决方案2】:

没有可靠的方法,因为背面的行为因浏览器而异。此外,如果有人回顾了历史,而你改变了正在发生的事情,那么你就是在改变历史。形而上学的“哇!”除此之外,这不是一个好主意。

除了来自重新提交的问题之外,这会导致什么问题?如果表单重新提交是一个问题,那么您需要在快速双击提交的情况下处理它。包含一个隐藏的 nonce 值(UUID 很好),将 nonce 与表单所做的任何事情的记录一起存储,并拒绝重复的 nonce。

【讨论】:

  • 您好 Jon,问题是重新提交表单。我已经考虑过您的建议,只是想问一下 pragma no-cache 是否会为我处理这个问题。如果有的话,我通常更喜欢采取更简单的方法。
  • pragma no-cache 已弃用,因此请查看缓存控制标头。除此之外,历史记录与网络缓存不同(在标准中明确说明)。 Web 缓存为我们提供了避免必须联系服务器以获取给定 URI 或必须下载整个内容的方法。浏览器历史记录是浏览器之前所处状态的记录,根本不是一回事。每年至少阅读几次ietf.org/rfc/rfc2616.txt。你永远不会过分熟悉它。
  • 我遇到了类似的问题,我在动态创建表单然后提交它,效果很好。但是,当在 Android 上点击后退箭头,然后完全重新填充我认为的表单时,它不需要。表单数据保持上次传递时的状态,然后重新提交。似乎浏览器中的某些东西正在缓存表单,但是在我用新值重新填充它们之前,表单和以前的值都不会出现,然后它仍然提交旧值。我也直接问一个问题。
  • 如果您有一台简单的计算机和浏览器信息亭,客户可以使用它在表单中提交他们的信息,它基本上每次都会为每个后续客户循环回一个新表单,而您没有不希望下一个客户能够回击几次以查看上一个客户的信息?想要这样做是有真正原因的。
  • @mikato 在这种情况下,你到底为什么要回去而不是使用新鲜的表格?
猜你喜欢
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
相关资源
最近更新 更多