HTTP_REFERER将我发送到同一页面

时间:2015-06-23 16:19:17

标签: php http-referer

我正在使用php而我正在尝试向我的联系表单添加一项功能,该功能会向我发送联系页面之前的页面。 我在表单代码中添加了这行代码:

$httpReferer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
$e_body = "Provenance : $httpReferer ";

这很好,并向我显示了一个链接,但问题是该链接是同一个联系页面(http://...contact.php)。 我需要的是用户在访问该contact.php页面之前访问过的页面。

任何人都知道为什么会这样? 有没有办法可以返回2页而不是1页?

谢谢:)

3 个答案:

答案 0 :(得分:2)

使用后退按钮的一种方法是向表单添加隐藏的输入(看到您在联系页面中使用的内容),并使用$_SERVER['REQUEST_URI']作为值并将会话数组分配给它和使用会话。也可以使用Cookie,但我在我的示例中使用了会话。

首先开始会议:

<?php 
session_start();

// you can uncomment it to destroy previously set sessions
// session_destroy();

$_SESSION['back'] = $_SERVER['REQUEST_URI'];

?>

<form action="page2.php" method="post">
<input type="hidden" name="goback" value="<?php echo $_SERVER['REQUEST_URI'] ?>">
...
</form>

然后在第二页:page2.php

<?php 
session_start();

// Your POST information for your contact code goes here

echo "<a href=\"$_SESSION[back]\">Go back</a>";

?>

或者,要进行完整的http调用:

$link = "http://" . $_SERVER['SERVER_NAME'].$_SESSION['back'];

echo "<a href=\"$link\">Go back</a>";

旁注:正如我在评论中所述,

我知道返回2页的唯一方法是使用javascript:window.history.go(-2),您可以在PHP中使用echo实现它。

另一种方法是使用面包屑方法,但这需要一些奇特的工作。

您也可以使用标题重定向,但请确保您在标题前没有输出。

价:

参考文献:

脚注:

  

我需要的是用户在访问该contact.php页面之前访问过的页面。

如果该页面没有引用,则用户无法返回,因为除非他们使用浏览器的后退箭头按钮,否则无法返回。 / p>

  • 引用者是一个人可以从您的网站或其他网站点击的链接。

如果没有引用者,您可以使用javascript:window.history.go(-1)

答案 1 :(得分:0)

如果您确实想使用$_SERVER['HTTP_REFERER'](请参阅其他评论),请在加载联系表单时将其存储在会话中,以便在提交表单时使用此功能。

// Store the referring URL when loading the contact form.
$_SESSION['ref'] = $_SERVER['HTTP_REFERER']

// Redirect user back to referring URL when submitting the form.
header('Location: ' . $_SESSION['ref']);
unset($_SESSION['ref']);
die;

希望这有帮助。

答案 2 :(得分:0)

header('Location: '.$_SERVER['HTTP_REFERER']);
die;

希望它能帮到你