php 网页 广告,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源代码如下(可自行扩展):

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

{

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:

This ia a jQuery + AJAX Test

* {

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;

}

//读取已点击IP列表

function ckip($ip)

{

$data = @file_get_contents("ip.txt");

$arr=@explode("\r\n",$data);

for($i=0;$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 "

";

}else{}

?>

这里是正常网站内容。。。。

这里是正常网站内容。。。。

这里是正常网站内容。。。。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值