返回按钮重新提交表单数据 ($_POST)

发布于 2024-08-19 11:46:20 字数 308 浏览 5 评论 0原文

我的问题是,当表单创建上一页时,后退按钮会导致浏览器显示“页面已过期”之类的内容。

示例:

  • page1:通过搜索提交的表单 标准($_POST 请求,表单 指向 page2)
  • page2: 接收 $_POST 请求并 显示结果(带有链接的用户列表, 指向第3页)
  • 第3页:显示用户个人资料

现在,当访问者单击浏览器中的后退按钮时,它将显示类似“页面已过期”的内容。

相反,上一页应该不带警告地显示(第 2 页,带有用户列表)

您的策略是如何避免这种行为的?

My problem is that the back button causes the browser to say something like "Page expired" when the previous page was created by a form.

Example:

  • page1: form submitted with search
    criterias ($_POST request, form
    points to page2)
  • page2: Receives $_POST request and
    show result (list of user with links,
    points to page3)
  • page3: Show user profile

Now when the visitor clicks the back button in the browser it will show something like "Page expired".

Instead the previous page should be shown with no warnings (page2, with the userlist)

How are your strategies to get around this behavior?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

溺渁∝ 2024-08-26 11:46:20

如果您提交带有搜索参数的表单,则您是在尝试获取一些数据,而不是修改一些数据。

因此,您应该使用 HTTP GET 方法,而不是 POST :当您打算创建/修改数据时应该使用 POST,而当您打算获取某些数据时应该使用 GET。

或者,如果您需要执行一些创建/修改操作:

  • 表单首先 POST 到第一页
    • 该页面执行一些操作(例如向数据库写入内容)
    • 然后使用 Location HTTP 标头重定向到另一个页面。
  • 这是最后一个页面,即浏览器使用 GET 请求进行查询,显示从 URL 中接收的参数中获取的数据。

有关此内容,请参阅维基百科上的 Post/Redirect/Get 页面。

If you are submitting a form with search parameters, you are trying to get some data, not modify some.

So, you should use the HTTP GET method, and not POST : POST should be used when you intend to create/modify data, and GET should be used when you intend to fetch some data.

Or, if you have some create/modify operation that has to be done :

  • The form first POSTs to a first page
    • That page does some operations (like writing something to a database)
    • And then redirects to another page, using a Location HTTP header.
  • It's that last page, that's queries by the browser using a GET requests, that displays the data fetched from the parameters received in the URL.

See the Post/Redirect/Get page on wikipedia, about this.

许一世地老天荒 2024-08-26 11:46:20

这适用于 PHP 和 IE8。

您不仅必须将缓存设置为私有,而且还必须删除 4 个缓存标头,而这只能在 PHP 5.3 中完成。在 PHP 5.2 中,如果使用 Zend Framework 的 setHeader() 方法,则只能将 4 个标头设置为空白值。由于某些原因,在 IE8 上将 4 个标头值设置为空值是不够的。这是 PHP 5.3 的代码:

    header_remove("Expires");
    header_remove("Cache-Control");
    header_remove("Pragma");
    header_remove("Last-Modified");

This applies to PHP and IE8.

Not only must you set cacheing to private, but you must remove the 4 cacheing headers and this can only be done with PHP 5.3. In PHP 5.2 you can only set the 4 headers to blank values if using the Zend Framework's setHeader() method. For some reason is not sufficient on IE8 to set the 4 header values to empty values. Here's the code for PHP 5.3:

    header_remove("Expires");
    header_remove("Cache-Control");
    header_remove("Pragma");
    header_remove("Last-Modified");
少女情怀诗 2024-08-26 11:46:20

在您发布到的脚本中发送 Location 标头,指向后面的页面。

Send a Location header in the script you POSTed to, pointing to the page that comes after.

不奢求什么 2024-08-26 11:46:20

不要使用 POST 进行搜索。可以使用 GET 安全地完成搜索,因为它不会改变任何内容。

Don't use POST for search. Search can safely be done with GET since it won't alter anything.

音盲 2024-08-26 11:46:20

您可以使用会话来执行此操作。

例如。

$_SESSION['名称'] = $_POST['名称'];

请记住在该过程完成后取消设置变量以优化内存使用。

You can use session to do this.

eg.

$_SESSION['name'] = $_POST['name'];

Remember to unset your variables after the process is complete to optimize memory usage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文