我需要实现一个链接点击计数器,它会计算链接上的点击次数...
现在我正在做的是,我将href链接到redir.php,这将增加数据库中的计数器,然后使用header('Location:');
我将其重定向到正确的URL。
这有效,但肯定不是最好的方法。为了使我的代码高效,我怎样才能使这个链接计数器更好? AJAX?
ajax没有多少exp,所以我想知道如何在ajax中做什么或者还有其他更好的方法......
我不希望有人写一个机器人脚本,它会向redir.php发出多个请求并弄乱统计数据。
答案 0 :(得分:2)
您可以使用
但我认为第一种javascript方法是最好的方法。
阿卡
答案 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中做同样的事情;读取并更新数据库。坚持你现在的实施。