我有一个PHP应用程序,其页面的表单可以搜索数据。当我单击“搜索”按钮时,使用HTTP POST方法到同一页面的摘要。此时,我单击结果列表中的一项,然后转到另一页。如果单击新页面上的浏览器后退按钮,则会收到“文档过期”错误。为什么?我该如何解决这个问题?
以下是示意图:
页面A-> HTTP发布提交到页面A->页面B->返回页面A->错误
谢谢。
答案 0 :(得分:1)
基本上,您不希望用户在POST
数据到html页面时完成请求。您应该将他们重定向到GET
页,因此他们的浏览器会将其视为他们的最后一个已知位置,因为重定向在浏览器中被视为整体请求的一部分。
// receive $_POST
// ... do work ...
// success!
header('Location: /wherever', true, 302);
Found
方法通常用于此目的,它使您可以从一个动词移至下一个动词(尽管其他动词也经常使用,例如303,但是...是的,仅使用302)< / p>
这应该可以解决您的问题!
侧面说明::这种特殊的用例是Flash会话之类的东西特别有用的地方。您希望数据跟随它们到重定向页面,因此您可以说“哦,您已登录!”管他呢。这是他们的目的。有几种方法可以给野兽蒙皮,但我只是想让你知道。
旁注++ :其他用户已提及它,但值得重申。上面的方法可以解决您的问题时,搜索表单的标准约定是使用GET
<form method="get" action="/search">
<input name="q">
<button type="submit">Search</button>
</form>
之所以这样做是出于几个原因,但是具体来说,搜索结果是可索引的,可书签的和可共享的。
POST
通常保留用于大块数据或敏感数据类型。还有更多用例,例如REST动词等,但是我已经简化了这一点。
至此,请确保您urldecode($_GET)
您的数据。