【问题标题】:How do I prevent HTTP_REFERER from being overwritten如何防止 HTTP_REFERER 被覆盖
【发布时间】:2017-12-19 18:17:36
【问题描述】:

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

<?php

session_start();

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

?>

为了测试上面的代码,我将下面的代码放在了 front-page.php 文件中(并且可以正常工作):

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

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

当访问者第一次从外部站点到达我的站点时,只要访问者在我的站点上,有什么方法可以存储 $_SERVER['HTTP_REFERER'] 的值?

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

【问题讨论】:

  • 检查referrer是否包含你的域名,如果包含则忽略?
  • 我最终需要将此信息发布到表单中,因此我需要在会话期间以某种方式记录初始值。

标签: php html wordpress session http-referer


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    非常简单 - 仅设置它如果它尚未设置。

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

    【讨论】:

    • 您可能还想在$_SERVER['HTTP_REFERER'] 上使用parse_url 来检测并忽略来自您自己网站域的引荐来源网址。
    猜你喜欢
    • 2021-02-08
    • 2020-07-23
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2018-01-22
    相关资源
    最近更新 更多