PHP:返回上一个加载了 HTTP 的页面 POST
PHP: back to previous page loaded with HTTP POST
我有一个 PHP 应用程序,其页面包含用于搜索数据的表单。当我单击“搜索”按钮时,会出现一个使用 HTTP POST 方法提交到同一页面的请求。此时我单击结果列表中的一个项目并转到另一页。如果我从新页面单击浏览器后退按钮,我会收到文档过期错误。为什么?我可以尝试解决这个问题吗?
这里是示意图:
A 页 -> HTTP Post 提交至 A 页 -> B 页 -> 返回 A 页 -> 错误
提前致谢。
基本上,您不希望用户请求在 POST
数据到 html 页面时完成。您应该将他们重定向到 GET
页面,以便他们的浏览器将其视为他们最后已知的位置,因为重定向被视为浏览器中整体请求的一部分。
// receive $_POST
// ... do work ...
// success!
header('Location: /wherever', true, 302);
Found
方法通常用于此,让您从一个动词移动到下一个动词(尽管其他动词也经常使用,例如 303,但是...是的,只需使用 302 )
这应该可以解决您的问题!
旁注:在这个特殊的用例中,Flash 会话之类的东西特别有用。您希望数据跟随它们到达重定向的页面,因此您可以说 "Oh hey, you logged in!" 或其他任何内容。这是他们的目的。有几种方法可以给那只野兽剥皮,但我只是想让你知道。
旁注++:其他用户也提到过,但值得重申。虽然以上解决了您的问题,但搜索表单的标准约定是使用 GET
<form method="get" action="/search">
<input name="q">
<button type="submit">Search</button>
</form>
这样做有几个原因,但具体而言,搜索结果是可索引的、可添加书签的和可共享的。
POST
通常保留用于大数据块或敏感数据类型。还有更多用例,例如 REST Verbs 等,但我过于简化了这一点。
至此,请确保您 urldecode($_GET)
您的数据。
我有一个 PHP 应用程序,其页面包含用于搜索数据的表单。当我单击“搜索”按钮时,会出现一个使用 HTTP POST 方法提交到同一页面的请求。此时我单击结果列表中的一个项目并转到另一页。如果我从新页面单击浏览器后退按钮,我会收到文档过期错误。为什么?我可以尝试解决这个问题吗?
这里是示意图:
A 页 -> HTTP Post 提交至 A 页 -> B 页 -> 返回 A 页 -> 错误
提前致谢。
基本上,您不希望用户请求在 POST
数据到 html 页面时完成。您应该将他们重定向到 GET
页面,以便他们的浏览器将其视为他们最后已知的位置,因为重定向被视为浏览器中整体请求的一部分。
// receive $_POST
// ... do work ...
// success!
header('Location: /wherever', true, 302);
Found
方法通常用于此,让您从一个动词移动到下一个动词(尽管其他动词也经常使用,例如 303,但是...是的,只需使用 302 )
这应该可以解决您的问题!
旁注:在这个特殊的用例中,Flash 会话之类的东西特别有用。您希望数据跟随它们到达重定向的页面,因此您可以说 "Oh hey, you logged in!" 或其他任何内容。这是他们的目的。有几种方法可以给那只野兽剥皮,但我只是想让你知道。
旁注++:其他用户也提到过,但值得重申。虽然以上解决了您的问题,但搜索表单的标准约定是使用 GET
<form method="get" action="/search">
<input name="q">
<button type="submit">Search</button>
</form>
这样做有几个原因,但具体而言,搜索结果是可索引的、可添加书签的和可共享的。
POST
通常保留用于大数据块或敏感数据类型。还有更多用例,例如 REST Verbs 等,但我过于简化了这一点。
至此,请确保您 urldecode($_GET)
您的数据。