如何解决 php 刷新时重新发送 http 引用数据的问题?

发布于 2024-07-13 09:02:49 字数 358 浏览 10 评论 0原文

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

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

I have a IN/OUT ratio hit counting system on my site. When a user is sent to my site, I grab the referrer, strip the domain, look up the domain and +1 to hits_in. Very simple. What I discovered thou is, if a user refreshes the page, the referrer is resent to the site, and it counts it as another +1. Whats even worse is that if user clicks on some link on the site, and then hits BACK to go to the original page, the referrer is resent, and it counts as another +1. So if a foreign site sends me 1 user, who clicks on a video link, views the video, hits BACK in his browser, and then does this 3 times, it will count as if a site sent me 4 users when in fact its just 1.

Any way I could prevent the 2 examples from happening without actually logging all IPs and checking access times for each IP before doing the +1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

热鲨 2024-07-20 09:02:49

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

I am not expert in this, but can't you just use sessions. temporarily store referred url into session, so if user clicks back than check if users session contains referral site. if it contains don't count.

纵性 2024-07-20 09:02:49

执行类似的操作,

如果用户没有设置 cookie 'referer_logged',请记录其引用者并设置 cookie。

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

Do something like,

If the user doesn't have the cookie 'referer_logged' set, log their referer and set the cookie.

This would make it log only one referer per user.

凉薄对峙 2024-07-20 09:02:49

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

将其放入您的函数文件中。

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

Here's a referer script i use sometimes.

Put this in your functions file.

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

And somewhere in your index file

session_start();
if(!isset($_SESSION["referer"]))
{
    if(referer())
    {
        $_SESSION["referer"] = 1;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文