【问题标题】:document expired after pressing back button按返回按钮后文档过期
【发布时间】:2016-04-15 10:05:07
【问题描述】:

我有一个名为 a.php 的页面。它有一个表单并通过 POST 将数据提交到同一个文件 (a.php) 。页面加载没有错误。然后我单击该页面上的任何链接(b.php 或 b.html)。它像往常一样指向任何页面。然后,当我从 b.php 或 b.html 单击返回按钮时,它不会显示上一页。

对解决这个问题有什么帮助吗?

谢谢

【问题讨论】:

  • 你需要重新提交你的值
  • 你能再解释一下吗?谢谢
  • 请添加您的 a.php 代码,它将帮助我们为您提供解决方案
  • 这是预期的浏览器行为,因为您在将 POST 值发送到要返回的页面之前发送。无法明确删除此行为。您只能通过 AJAX 将值提交到将它们保存到会话中的脚本来解决此问题,然后 Javascript 将用户带到您从会话中读取 POST 值的新页面。这样您就不会直接向页面发送 POST 值,因此如果您返回,浏览器不会显示文档已过期。
  • @Charlotte 我会试试这个 ajax 方法谢谢

标签: php


【解决方案1】:

关于方法

$_POST 方法用于提交表单创建或修改它是一种安全的方法。换句话说,POST 正在从浏览器向服务器发送数据

举例

  • 创建文章
  • 编辑文章
  • 文件上传

在您的情况下,您正在获取值 POST 不是为了获取值使用 $_GET 方法

为什么文档会过期?

这张图片来自wikipedia

为什么浏览器会这样做?

这是因为它可以防止重复提交。

例如:在任何购物网站上都有付款选项,用户购买产品并付款,现在如果他/她(用户)再次刷新页面,则付款完成两次。

【讨论】:

  • 一些小的技术细节:POST 本质上并不比 GET 更安全,除非在安全外壳 (https) 下,它只是被混淆了。文件上传应该由 PUT 请求处理(如果您在服务器上创建新资源),但这并不真正支持/与 web 应用程序相关。
【解决方案2】:

根据您的问题,页面 a.php 正在向页面本身提交数据(发布),因此如果您转到其他页面然后想再次返回页面 a.php(通过单击浏览器上的后退按钮)它会导致文档过期,因为当您单击它时,您没有将任何数据(发布)提交到页面 a.php。

【讨论】:

  • 我明白你的意思。但是让我们说在 facebook 上,你在 home.php 上发布了一个状态更新,它自己发布了数据,可能是我错了,然后我们可以从 home.php 按下 profile.php 链接,再次按下 profile.php 的返回按钮。但是 home.php 仍然存在,我们不再发布数据。如果我错了,请纠正我谢谢
  • facebook 使用 ajax 发布数据,所以它会处理它们。只是尝试使用 ajax 发布数据。你可以看到这个http://www.formget.com/submit-form-using-ajax-php-and-jquery/
  • 谢谢。我会试试这个方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多