保留表单内容的行为是浏览器提供的便利设施,与 HTTP本身无关。
当您使用 PHPheader()函数进行重定向时,您使页面返回一个 HTTP 状态301or 302,它告诉浏览器加载另一个 URL。
与 Javascripthistory.back()方法的不同之处在于您没有提供 URL,而是专门告诉浏览器后退一步,就像用户单击了工具栏中的“后退”按钮一样。然后浏览器决定表单应该按照用户离开该页面时的状态呈现。
AFAIK,在 HTTP 中没有办法告诉用户代理回到它的历史,因为“历史”不是原始 HTTP 中定义的概念(它是一个明确的无状态协议)。因此,只有客户端代码,即 Javascript,才会触发该行为。
与其尝试改变重定向的工作方式,不如让它根本不发生重定向,并且表单只是重新显示并预先填充了用户的选择。这样您就不会依赖任何特定的浏览器行为。
这不需要任何复杂的会话存储,因为值$_POST已经存在,因此您可以使用 like 呈现表单元素<input name="foo" value="x" <?php if ( $_POST['foo'] == 'x' ) { echo 'selected'; } ?>>。这是表单验证后重新显示表单的常用方法。