你怎么能解决在PHP刷新时重新发送http引用数据?

时间:2009-02-05 00:23:16

标签: php http referrer

我的网站上有一个IN / OUT比率命中计数系统。当用户被发送到我的网站时,我会抓住推荐人,剥离域名,查找域名并点击+1到hits_in。非常简单。我发现,如果用户刷新页面,引荐者将被重新发送到该网站,并将其视为另一个+1。更糟糕的是,如果用户点击网站上的某些链接,然后点击“返回”转到原始页面,则重新发送引荐来源,并将其视为另一个+1。因此,如果一个外国网站向我发送一个用户,点击一个视频链接,查看视频,在他的浏览器中点击BACK,然后执行3次,它将被视为一个网站发送给我4个用户实际上它只是1。

任何方式我都可以阻止这2个示例的发生,而不会在执行+1之前实际记录所有IP并检查每个IP的访问时间。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

做类似的事情,

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

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

答案 2 :(得分: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;
    }
}