如何防止 HTTP_REFERER 被覆盖

How do I prevent HTTP_REFERER from being overwritten

在我的 WordPress 站点的 header.php 文件中的 <html> 标记之前,我有以下代码:

<?php

session_start();

$_SESSION['refererurl'] = $_SERVER['HTTP_REFERER'];

?>

为了测试上面的代码,我将下面的代码放在了 front-page.php 文件中(并且有效):

<?php
    echo $_SESSION['refererurl'];
?>

我这样做是因为我想跟踪引导访问者从外部站点访问我站点的引荐来源网址 URL(用于目标跟踪目的)。问题是 $_SERVER['HTTP_REFERER'] 在页面加载时重置,因此当访问者首次登陆我的网站时这些信息很有用,但每当访问者进一步导航到我的网站时它就会被覆盖。

当访问者第一次从外部网站到达我的网站时,有没有办法存储 $_SERVER['HTTP_REFERER'] 的值,只要访问者在我的网站上?

我对 PHP 这个级别还比较陌生,所以请原谅我缺乏经验。我将 $_SERVER['HTTP_REFERER'] 存储在一个会话中,因为这是我根据对会话和 cookie 的快速研究收集到的内容。

非常简单 - 仅设置它 如果它还没有设置。

if(!isset($_SESSION['refererurl'])) {
    $_SESSION['refererurl'] = $_SERVER['HTTP_REFERER'];
}

您可以检查 $_SESSION['refererurl'] 是否已经设置并且不要覆盖它:-)

if(!isset($_SESSION['refererurl'])) {
    $_SESSION['refererurl'] = $_SERVER['HTTP_REFERER'];
}

您可能还想在尝试分配之前检查 referer 是否为空:

if(isset($_SERVER['HTTP_REFERER']) && !isset($_SESSION['refererurl'])) {
    $_SESSION['refererurl'] = $_SERVER['HTTP_REFERER'];
}