我有一个网页 x.php
(在我网站的密码保护区域)它有一个表单和一个使用 POST
的按钮。发送表单数据并打开的方法 x.php#abc
.这很好用。
但是,如果用户决定在 Internet Explorer 7 中导航回原来的 x.php
中的所有字段。清除所有内容,必须再次输入。我无法在 session 中保存发布的信息,我试图了解如何让 IE7 以我想要的方式运行。
我在网上搜索并找到了表明 HTTP header 应包含显式缓存信息的答案。目前,我试过这个:
session_name("FOO");
session_start();
header("Pragma: public");
header("Expires: Fri, 7 Nov 2008 23:00:00 GMT");
header("Cache-Control: public, max-age=3600, must-revalidate");
header("Last-Modified: Thu, 30 Oct 2008 17:00:00 GMT");
及其变体。没有成功。使用诸如 WireShark 之类的工具查看返回的标题向我展示了 Apache 确实尊重我的标题。
所以我的问题是:我做错了什么?
最佳答案
IE 将自动保留后退按钮上的表单内容,只要:
您似乎手头有缓存,所以我猜后者可能适用。 (正如 mkoeller 所说,如果页面在最后几次后退点击中,Firefox 可以避免这个问题,方法是让页面本身在屏幕上的存活时间比它在屏幕上的时间长。但是这是可选的,Firefox 将恢复到与 IE 和其他相同的行为一旦您浏览了几页之前的浏览器并且旧的已经过期。)
如果您从脚本 onload 创建自己的表单字段,那么浏览器无法知道新输入控件与旧实例“相同”,因此无法使用之前提交的值填充它.在这种情况下,如果您希望它与后退按钮一起玩得很好,您必须开始在客户端上存储数据。
然后您必须使用某种状态键控,以便每组数据都与页面的一个实例相关联,否则通过同一表单的多个实例或同时在表单上打开两个浏览器选项卡会严重混淆你的脚本。
然后你开始收集大量数据,如果它们是大表单,如果你使用的客户端存储机制是 cookie,你可能会开始丢失数据,以及发送大量不必要的状态废话每个 HTTP 请求。其他客户端存储机制也可用,但它们是特定于浏览器的。
简而言之:很好地处理动态生成的表单是一个巨大的痛苦,如果可以的话,最好避免。在页面上有一个脚本使可见的隐藏表单,从而允许浏览器执行他们的领域内存魔法而不是给你任务,通常要容易得多。
关于internet-explorer - 浏览器后退按钮恢复空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261351/