计算器中链接的点击次数

时间:2011-03-07 15:22:15

标签: php ajax

我需要实现一个链接点击计数器,它会计算链接上的点击次数...

现在我正在做的是,我将href链接到redir.php,这将增加数据库中的计数器,然后使用header('Location:');我将其重定向到正确的URL。

这有效,但肯定不是最好的方法。为了使我的代码高效,我怎样才能使这个链接计数器更好? AJAX?

ajax没有多少exp,所以我想知道如何在ajax中做什么或者还有其他更好的方法......

我不希望有人写一个机器人脚本,它会向redir.php发出多个请求并弄乱统计数据。

5 个答案:

答案 0 :(得分:2)

您可以使用

  1. Javascript对您的“counter.php”进行Ajax调用
  2. 在每个页面上添加Javascript代码(如Google Analytic)以在数据库上发布
  3. 创建“cron作业”以分析“access_log”(如果计算同一域中的链接,服务器)
  4. 添加PHP代码以在生成每个页面时更新数据库。
  5. 但我认为第一种javascript方法是最好的方法。

    1. 在链接上添加一个类到spy
    2. 添加“事件处理程序”以创建AJAX帖子
    3. 创建一个简单的PHP脚本来更新数据库。
    4. 阿卡

答案 1 :(得分:1)

如果链接是从CMS这样的来源而不是手工生成的,那么您可以将链接ID传递给您的URL,并加载链接已被点击的下一页计数增量。这样做需要你在该步骤之后重新加载(没有链接ID)页面,以确保复制链接的人不会不必要地使计数器增加。

如果您的用户启用了javascript,此方法是防弹的,但如果您的用户确实启用了javascript,您仍然可以执行上述方法并通过客户端层,绕过整个事件并通过AJAX发送。

这可能看似冗余,但是这样,你加速了大多数访问者的流程(没有重定向,因为你通过AJAX这样做),如果javascript不起作用或被禁用,你有一个可以避免遗漏任何点击的失败证明系统

答案 2 :(得分:1)

建立@Akarun的答案,这里是一个示例代码(在jQuery中),用于在“间谍”类的链接点击上添加“监听器”。请注意,我加载图像而不是尝试$.post或其他AJAX事件 - 这是因为当用户导航离开页面时这些内容将无法完成(点击链接时必须执行此操作)大多数情况下),而浏览器将及时获得图像请求。它仍然是一个普通的PHP脚本,浏览器只是认为它正在加载图像。

$(document).ready(function() {
    $('a.spy').mousedown(function(event) {
        var page_url = "<?=$_SERVER['PHP_SELF']?>";
        var target_url = $(this).attr('href');
        if(target_url != "#" && target_url != "javascript:void(0);")
            new Image().src= "/welcome/track_link/?page_url=" + escape(page_url) + "&target_url=" + escape(target_url);
        return true;
    });
});

答案 3 :(得分:0)

按照谷歌的方式行事:

<a href="http://www.vacationhomes.com/" onmousedown="return clk(this.href,'','','','2','','0CE4Q0gIoAzAB')">Waterfront Rentals</a>

一个javascript函数。传递的代码有助于安全。

实际上,在查看Google源代码时,他们会使用网址作为参数加载图片

window.clk=function(e,b,a,k,i,c,j)
{
    if(document.images) {
        b=encodeURIComponent||escape;a=new Image;var f=window.google.cri++;window.google.crm[f]=a;a.onerror=a.onload=a.onabort=function() {
            delete window.google.crm[f]
        };
        var d,g,h;if(google.v6) {
            d=google.v6.src;g=google.v6.complete||google.v6s?2:1;h=(new Date).getTime()-google.v6t;delete google.v6
        }if(c&&c.substring(0,6)!="&sig2=")c="&sig2="+c;a.src=["/url?sa=T&source=",google.sn,"&cd=",b(i),google.j&&google.j.pf?"&sqi=2":"","&ved=",b(j),e?"&url="+b(e.replace(/#.*/,
            "")).replace(/\+/g,"%2B"):"","&ei=",google.kEI,d?"&v6u="+b(d)+"&v6s="+g+"&v6t="+h:"",c].join("")
    }
    return true
};

答案 4 :(得分:0)

您是否考虑过移动用户和其他设备?  我相信您的第一次实施是完全充分和安全的。 您可以完全控制计数,并且不存在用户操作问题。 它也可以预测。

毕竟,ajax会在counter.php中做同样的事情;读取并更新数据库。坚持你现在的实施。