我知道这篇文章有many duplicates,但这些都没有提供解释性答案,更多的是一堆代码。我想更好地了解正在发生的事情。
我有一系列页面,用户在每页上填写信息。但是,我希望他们能够返回上一页编辑详细信息 - 不会出现文档过期/缓存丢失错误。我知道这是由POST造成的,因为服务器需要发布信息,因此需要重新发送。但我不了解给定的解决方案。
上面的答案提出了这个问题:
if ('GET' == $_SERVER['REQUEST_METHOD']) {
//display view
}
else if ('POST' == $_SERVER['REQUEST_METHOD']) {
//process input
//update session
header('Location: /next/page/to/view', true, 303);
}
但这是做什么的?我一直在阅读GET和POST,但仍然不了解这是做什么的,也不知道我应该如何使用它。我当前的页面使用SESSION,例如在第2页上,在第1页上提交表单后:
if (isset($_POST['input'])) {
$input = $_POST['input'];
$_SESSION['example'] = $input;
}
然后在第3页:
if (isset($_POST['otherinput'])) {
$otherinput = $_POST['otherinput'];
$_SESSION['otherexample'] = $otherinput ;
}
if (isset($_SESSION['example'])) {
$input = $_SESSION['example'];
}
但正如所说的那样,在返回时不会工作,用户无需刷新页面。如何使用建议的解决方案,还请解释正在发生的事情。我在这里学习,但不幸的是,许多答案只是提供一些代码而且就是这样。我也喜欢解释!
编辑。我也发现这有效,但在这种情况下我也不明白为什么。我需要进一步解释。什么是最好的方式?
<?php
session_cache_limiter('private');
session_start();
header('Content-Type:text/html; charset=utf-8');
?>
答案 0 :(得分:1)
马丁的评论是对的,但我会详细说明一下。
让我们考虑以下示例:第1页上有一个表单,通过POST提交到第2页.Page 2显示结果和指向第3页的链接.Page 1还有一个指向第4页的链接,这只是空的。
现在,让我们看看当点击第1页上的链接时会发生什么。
但是当您在第2页和第3页提交数据时会发生什么?
那么,您可以做什么来显示页面而不再发送数据并触发警告?当浏览器接收到该站点重新定位的信息(http状态301和302)时,它将新URL保存在其历史记录中而不是旧记录中。我们将通过执行我们需要对发布的数据执行的所有操作来使用此功能,然后将浏览器重定向到其他网址。浏览器将执行GET请求以获取新页面。因此,当您单击后退按钮时,GET请求将记录在浏览器的历史记录中,而不是POST请求中。所以没有发出警告。
我希望这是可以理解的;)