【问题标题】:PHP: back to previous page loaded with HTTP POSTPHP:返回使用 HTTP POST 加载的上一页
【发布时间】:2019-06-05 14:30:08
【问题描述】:

我有一个 PHP 应用程序,其页面具有用于搜索数据的表单。当我单击搜索按钮时,使用 HTTP POST 方法有一个 Sumbit 到同一页面。此时我单击结果列表中的一项并转到另一页。如果我从新页面单击浏览器后退按钮,我会收到 Document Expired 错误。为什么?我可以尝试什么来解决这个问题?

这里是一个示意图回顾:

页面 A -> HTTP Post 提交到页面 A -> 页面 B -> 返回页面 A -> 错误

提前致谢。

【问题讨论】:

  • “当我点击搜索按钮时,使用 HTTP POST 方法有一个 Sumbit 到同一页面。” ...从技术上讲,这是错误的方法,你没有更新您正在获取的服务器上的资源...
  • 您也许可以利用各种缓存头告诉浏览器可以将搜索结果保留一段时间。

标签: php http post browser back


【解决方案1】:

基本上,您不希望用户请求在他们POST 数据到 html 页面时完成。您应该将他们重定向到 GET 页面,以便他们的浏览器将其视为他们最后一个已知位置,因为重定向被视为浏览器中整体请求的一部分。

// receive $_POST
// ... do work ...
// success!
header('Location: /wherever', true, 302);

Found 方法通常用于此目的,并让您从一个动词移动到下一个动词(尽管其他动词也经常使用,例如 303,但是……是的,只使用 302)

这应该可以解决您的问题!


旁注:这个特殊的用例是 Flash 会话之类的东西特别有用的地方。您希望数据跟随他们到重定向页面,因此您可以说“哦,嘿,您已登录!”管他呢。这是他们的目的。有几种方法可以剥去野兽的皮,但我只是想让你知道。


旁注++:其他用户提到过,但值得重申。虽然上述解决了您的问题,但搜索表单的标准约定是使用 GET

<form method="get" action="/search">
    <input name="q">
    <button type="submit">Search</button>
</form>

这样做有几个原因,但特别是搜索结果可以索引、书签和共享。

POST 通常保留给大块数据或敏感数据类型。还有更多的用例,例如 REST 动词等,但我已经过度简化了。

至此,请确保您urldecode($_GET) 您的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2019-02-23
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多