0

我的网站上有一个输入/输出比率命中计数系统。当用户被发送到我的网站时,我会抓取引荐来源网址,剥离域,查找域并 +1 到 hits_in。非常简单。我发现你是,如果用户刷新页面,引用者会重新发送到该站点,并将其计为另一个 +1。更糟糕的是,如果用户点击了网站上的某个链接,然后点击 BACK 回到原来的页面,就会重新发送referrer,它会被视为另一个+1。因此,如果一个外国网站给我发送了 1 个用户,他点击了一个视频链接,观看了视频,在他的浏览器中点击返回,然后执行了 3 次,这将被视为一个网站向我发送了 4 个用户,而实际上它只是1.

无论如何,我可以在不实际记录所有 IP 并在执行 +1 之前检查每个 IP 的访问时间的情况下阻止这两个示例的发生。

4

3 回答 3

2

我不是这方面的专家,但你不能只使用会话。临时将引用的 url 存储到会话中,因此如果用户点击返回而不是检查用户会话是否包含引用站点。如果它包含不计算。

于 2009-02-05T00:30:08.130 回答
1

做类似的事情,

如果用户没有'referer_logged'设置 cookie,请记录他们的引荐来源并设置 cookie。

这将使其每个用户仅记录一个引用者。

于 2009-02-05T00:33:04.583 回答
1

这是我有时使用的引用脚本。

把它放在你的函数文件中。

function referer()
{
    if(isset($_SERVER["HTTP_REFERER"]) && substr($_SERVER["HTTP_REFERER"], 0, 22) != "http://www.example.com" && substr($_SERVER["HTTP_REFERER"], 0, 18) != "http://example.com")
    {
        $result = sprintf("INSERT INTO referer (referer, ip, date) VALUES ('%s', '%s', '%d')", mysql_real_escape_string($_SERVER["HTTP_REFERER"]), mysql_real_escape_string($_SERVER["REMOTE_ADDR"]), time());
        $query = mysql_query($result);

        if($query)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
}

在你的索引文件的某个地方

session_start();
if(!isset($_SESSION["referer"]))
{
    if(referer())
    {
        $_SESSION["referer"] = 1;
    }
}
于 2009-02-05T00:38:47.800 回答