我的 PHP 项目中有六页的注册表单。
在任何页面之间,如果我按下资源管理器栏中的后退按钮,我会收到错误消息:
网页已过期
我$_POST
用来提交数据。我不明白为什么会这样?
该消息与 IE 处理从 POST 数据生成的页面的方式有关。
一般来说,为了避免这个问题,您必须确保在回溯历史中,用户将永远无法登陆从 POST 请求生成的页面。正如jspcal 所建议的,您的 POST 响应应该是重定向到 GET 请求的另一个页面。这也被认为是最佳实践,因为它降低了两次提交表单的风险。
收到帖子后重定向页面:
$name = $_POST['name'];
...
header('Location: next.php');
当您尝试通过返回浏览器历史记录重新提交帖子数据时,这总是在某些浏览器(您可能正在使用 Internet Explorer)上发生。但是,许多浏览器(例如 Firefox)让您有机会在返回历史记录时再次提交帖子数据。
你试过“$_GET”吗?这可能是因为 POST 信息来自之前的页面,并且没有真正保存在任何地方比页面转换的时间长,而 GET 使用 URL 发送信息,因此信息存储在某个地方。我会看看 GET 会发生什么。
真正的答案是“如果您点击后退按钮,浏览器不会发送您首次访问该页面时最初发送的 POST 请求”,如果您正在执行多步骤表单,您可能想要做的事情是它与 AJAX,或使用 GET 而不是 POST。