PHP+Ajax实现网站广告防止恶意点击解决方案

 遇到问题                                                              

    辛苦做网站,好不容易有点起色,考略到入不敷出的开支,于是决定投放广告,于是选择了GG,和百度,(弹窗神马的不考虑)

于是继续努力,努力。。。可是、大家都知广告联盟都是有体现最低金额的,悲剧的事当金额逼近最低限度时,收到了一封作弊邮件。。

于是悲剧的事情发生了。。。。。

 分析问题                                                      

自己作弊是不可能的,这点常识我还是懂的。考略到可能是有些 ”好心“ 用户帮了我一把。(在此表示深深的感谢)。

 (PS:本人不善言谈,不废话直接进入主题)

 技术解决方案 (希望大家有更好的方案请在此讨论)                                                      

使用技术:

PHP,jquery(忽略),Ajax(重点)

方案解析:

对广告DIV层Click事件进行监控,当用户点击DIV内广告使 同时出发div的Click事件,(不影响正常的点击弹出)。

对已触发的DIV  Click事件进行处理。

具体事件处理:

1、使广告DIV层进行隐藏消失,同时记住用户点击广告时间,点击页面,用户IP(重要)等信息,如需更多请自行获取。

2、写入文件或数据库,记录以上用户信息。

3、当同一用户在24小时(自己设定)内刷新网站或页面时,判断当前用户IP是否在数据库或数据文件中已存在,从而决定广告是否对该用户进行展示。

 

我这里使用的是Ajax异步访问:

save.php?ip=127.0.0.1&url=http://127.0.0.1/html/3453&browser=msie

通过GET方式得到相应用户新进行储存数据。

 

save.php源代码如下(可自行扩展):

 

<?php
header("Content-type:text/html;charset=gb2312");
if($_GET['ip'])
{
	if(is_file("ip.txt"))
	$data = @file_get_contents("ip.txt");
	$arr=@explode("|",$data);	
	for($i=0;$i<count($arr);$i++)
	{
		if($_GET['ip']==$arr[$i])
		{
			exit();
		}
	}
	$fp = @fopen("ip.txt",'w');
	$data = $data."\r\n"."IP:".$_GET['ip']." | "."点击时间:".microtime(true)." | 来源页面:".$_GET[url]." | 浏览器:".$_GET[browser];
	fwrite($fp,$data);
	fclose($fp);
}
?>

  

 show_ad.js 代码如下(异步访问save.php)

$(function()
{
$('#ad').click(
function(){
//广告隐藏
$("#ad").hide('true');
//记录IP开始
					var xmlHttp;
					function S_xmlhttprequest(){
					
						if(window.ActiveXObject){
						xmlHttp = new ActiveXObject('Microsoft.XMLHttp');
						}else if(window.XMLHttpRequest){
						xmlHttp = new XMLHttpRequest();
						}
					}
					
					function fun1(){
						var ip=document.getElementById("ad_ip").innerHTML;
						var url=location.href;
						var bro=$.browser;
						//alert(name);
						var browser='';
						for(var name in bro)
						{
							if(bro[name] == true){
							var browser=browser+name+",";}
						}	
						
						var d=new Date();
						var time=d.getSeconds();//解决IE7bug
						
						S_xmlhttprequest();
						xmlHttp.open("GET","save.php?ip="+ip+"&url="+url+"&browser="+browser+"&time="+time,true);
						xmlHttp.onreadystatechange = fun2;
						xmlHttp.send(null);
					}
					
					function fun2(){
						if(xmlHttp.readyState==4){
						if(xmlHttp.status==200){
							var str1=xmlHttp.responseText;
							//alert(str1);
							document.getElementById('ceshi').innerHTML=str1;
						  }
					
						}
					
					}

				fun1();//执行方法
//记录IP结束				
}


);//Click结束

});//document结束

  

 测试是否显示广告页面index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>This ia a jQuery + AJAX Test</title>
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<script src="show_ad.js" type="text/javascript"></script>
<style>
* {
	margin:0px auto;
}
div {
	width:800px;
}
#ad {
	width:900px;
	height:140px;
	background:#003366;
	text-align:center;
	color:#FFFFFF;
	font-size:24px;
	padding-top:10px;
	font-family:Arial, Helvetica, sans-serif;
	margin-top:100px;
}
</style>
</head>

<body>
<?php 
	//读取已点击IP列表
	function ckip($ip)
	{
		$data = @file_get_contents("ip.txt");
		$arr=@explode("\r\n",$data);
		for($i=0;$i<count($arr);$i++)
		{
			$arr2=explode(" | ",$arr[$i]);
			$arr2[0] = @str_replace("IP:","",$arr2[0]);
			if($ip==$arr2[0])
			return 1;
		}
		return 0;
	}
	if(ckip($_SERVER[HTTP_HOST])==0)//未点击过
	{
		//显示广告
		echo "
				<div id='ad'>
				<a href='http://www.baidu.com' target='_blank'><img src='logo.gif' width='270' height='129' /></a>This is an AD!
				<div style='display:none' id='ad_ip'>".$_SERVER[HTTP_HOST]."</div>
				</div>";
	}else{}
	
?>
<div>
  <p>这里是正常网站内容。。。。 </p>
  <div>
    <p>这里是正常网站内容。。。。 </p>
  </div>
  <div>
    <p>这里是正常网站内容。。。。 </p>
  </div>
</div>
</body>
</html>

 

  不废话了,大家仔细研究下,如果有更好的思路,解决方案欢迎讨论。

转载于:https://www.cnblogs.com/wendywu/archive/2011/12/21/2296120.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值