返回按钮重新提交表单数据 ($_POST)
我的问题是,当表单创建上一页时,后退按钮会导致浏览器显示“页面已过期”之类的内容。
示例:
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您提交带有搜索参数的表单,则您是在尝试获取一些数据,而不是修改一些数据。
因此,您应该使用 HTTP GET 方法,而不是 POST :当您打算创建/修改数据时应该使用 POST,而当您打算获取某些数据时应该使用 GET。
或者,如果您需要执行一些创建/修改操作:
Location
HTTP 标头重定向到另一个页面。有关此内容,请参阅维基百科上的 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 :
Location
HTTP header.See the Post/Redirect/Get page on wikipedia, about this.
使用Post/Redirect/Get (PRG) 模式。
Use the Post/Redirect/Get (PRG) Pattern.
这适用于 PHP 和 IE8。
您不仅必须将缓存设置为私有,而且还必须删除 4 个缓存标头,而这只能在 PHP 5.3 中完成。在 PHP 5.2 中,如果使用 Zend Framework 的 setHeader() 方法,则只能将 4 个标头设置为空白值。由于某些原因,在 IE8 上将 4 个标头值设置为空值是不够的。这是 PHP 5.3 的代码:
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:
在您发布到的脚本中发送
Location
标头,指向后面的页面。Send a
Location
header in the script you POSTed to, pointing to the page that comes after.不要使用 POST 进行搜索。可以使用 GET 安全地完成搜索,因为它不会改变任何内容。
Don't use POST for search. Search can safely be done with GET since it won't alter anything.
您可以使用会话来执行此操作。
例如。
请记住在该过程完成后取消设置变量以优化内存使用。
You can use session to do this.
eg.
Remember to unset your variables after the process is complete to optimize memory usage.