【问题标题】:HTTP_REFERER sends me to the same pageHTTP_REFERER 将我发送到同一页面
【发布时间】:2015-06-23 16:19:17
【问题描述】:

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

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

这可以正常工作并向我显示一个链接,但问题是该链接是同一个联系页面 (http://...contact.php)。 我需要的是用户在访问该contact.php页面之前访问的页面。

有人知道为什么会这样吗? 有没有办法返回两页而不是一页?

谢谢:)

【问题讨论】:

  • 您的三元运算符缺少?。另外,不要依赖 $_SERVER['HTTP_REFERER'] 不是 100% 可靠的。 stackoverflow.com/a/6023980
  • 啊“?”是错字,我会在这里更正!在我的实际代码中是正确的^^我尝试使用变量 $HTTP_REFERER 而不通过 $_SERVER 但它也不起作用:/
  • 我总是从字面上理解发布的代码 ;-) 你会惊讶于人们实际使用什么,这就是他们发布的内容。称之为“经验”;-)
  • 我知道返回 2 页的唯一方法是使用 javascript:window.history.go(-2),您可以在 PHP 中通过 echo 实现它。另一种方法是使用面包屑方法,但这需要一些花哨的工作。我以前见过它,但我可能要花 1/2 小时才能找到它。如果您想使用真正的后退按钮,请使用会话和/或 cookie。同样,不要依赖$_SERVER['HTTP_REFERER']。 “为什么”请咨询stackoverflow.com/a/6023980
  • 我在下面的答案中为您发布了一个示例。

标签: php http-referer


【解决方案1】:

拥有后退按钮的一种方法是在表单中添加隐藏输入(查看您在联系页面中使用的内容),并使用$_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>";

旁注:正如我在 cmets 中所说的,

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

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

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

参考:


参考资料:


脚注:

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

如果页面没有引用者,那么用户就无法返回,因为没有什么可返回的,除非他们使用浏览器的返回箭头按钮。

  • 引荐来源网址是指人们从您的网站或其他网站点击的链接。

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

【讨论】:

    【解决方案2】:

    如果您真的想使用$_SERVER['HTTP_REFERER'](请参阅其他 cmets),请在加载联系表单时将其存储在会话中,以便您可以在提交表单时使用它。

    // 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;
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:
      header('Location: '.$_SERVER['HTTP_REFERER']);
      die;
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-18
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-23
        相关资源
        最近更新 更多