跟我说这个: - )
页数: 的index.php contact.php
我从index.php转到contact.php,对contact.php执行HTML POST(我将数据发送到数据库...),然后有一个后退按钮返回index.php。现在我正在寻找一个Javascript或PHP解决方案返回(完全链接javascript history.back(-1))但我不希望该页面再次发布contact.php的POST,我不会想要使用history.back(-1)。现在我知道我可以说回来,但我不想硬编码。和建议?
答案 0 :(得分:4)
您应该使用POST-REDIRECT-GET模式。
接受POST数据的页面应该响应303标题并重定向到其他地方。
// this is the file which accepts the post data
header("HTTP/1.1 303 See Other");
header("Location: http://$_SERVER[HTTP_HOST]/afterthepost.php");
die();
然后在该页面中,如果用户进入"返回" (通过任何方式-javascript,后退按钮),他不会再次提交帖子或浏览器要求重新提交。
一个非常好的例子,这里很容易理解:http://wordsideasandthings.blogspot.com/2013/04/post-redirect-get-pattern-in-php.html
答案 1 :(得分:2)
我一直在寻找可靠的后退按钮,这是我比history.go(-1)
或$_SERVER["HTTP_REFERER"]
或其他使用标题和会话技巧的人更喜欢的解决方案:
header('Cache-Control: no cache');
,session_cache_limiter('private_no_expire');
我发现我的申请同样不可靠。
背景:我有一个搜索表单,可以转到结果集页面。结果页面具有典型的CRUD类型功能,可以使用GET和POST查看或编辑记录。结果集页面还包含指向其他子页面的链接,以添加/编辑各种记录详细信息。用户需要能够导航到结果页面和子页面,并且仍然能够返回到原始结果集。
解决方案:搜索表单将用户发送到一个中间页面,该页面设置一些保留原始搜索参数的会话变量,然后将用户定向到显示结果集的页面。
搜索页面是一个基本搜索表单,其中包含搜索字段和搜索值。
中间页面:
session_start();
// Unset the variable if it exists
unset($_SESSION['search']);
unset($_SESSION['field']);
unset($_SESSION['value']);
if (isset($_POST['search'])){
$_SESSION['search'] = $_POST['search'];
$_SESSION['field'] = $_POST['field'];
$_SESSION['value'] = $_POST['value'];
}
// All sessions are set so redirect user to the results
header('Location: https://www.yourwebsite.com/results.php');
使用后退按钮代码:
<a href='results.php'> < Back </a>
我很高兴听到有人能改进这个解决方案。如果有兴趣,我会尝试在小提琴或某个地方设置一个工作示例。
答案 2 :(得分:0)
您可以使用history.go(-1)或history.back()之类的内容,但是如果用户未提示再次提交帖子数据,则需要删除所需页面的缓存(请参阅this link )
答案 3 :(得分:0)
使用以下PHP代码作为后退按钮
<a href="<?php echo $_SERVER['HTTP_REFERER']; ?>" > Back </a>