黄聪:URL推广系统防作弊
要实现的功能:
1、注册用户登录以后可以获取到个人私人唯一的一个推广链接,通过主动传播带来的注册用户全部计入该ID名下;
2、其中与该ID相同cookies或者同IP的注册量全部作为作弊处理(也就是说不计入该ID名下,被带来的新ID本身是没有影响的)
3、累计推广用户1人以上5人以下送E币若干(每人累计见表如下)
推广人数 E币
1人 300
2人 300
3人 300
4人 300
5人 300
下面是实现方法:
1、已登录状态生成推广链接并记录主推广id作为的cookie:
setcookie("friend_invite_check",$uid,time()+86400,"/");//生成推广链接后的checkcookie 防止同cookie注册
$invite = M("FriendInvite");
$re = $invite->where("uid = $uid")->find();
if(!$re){//没有数据则写入,生成推广链接。
$ip=get_client_ip();
$data['uid']=$uid;
$data['token']=md5($uid."http://hcsem.com");
$data['create_time']=time();
$data['cip']=$ip;
$res = $invite->add($data);
}
$ref = $invite->where("uid = $uid")->find();
//echo "<span style='display:none'>http://".$_SERVER["HTTP_HOST"].'/Jihuo/invite/uid/'.$uid.'/token/'.$ref['token']."</span>";
2、进入推广链接,进入后记录一个住推广id到friend_invite如果这一步没有成功后面的推广是无效滴,记录成功后,不管在哪一个入口注册都会记录到推广成功数据库:
public function invite(){
$input = new Input();
$token = $input->get('token');
$uid = $input->get('uid'); $uinfo =$this->uinfo();
$suid = $uinfo['id'];
//echo $uinfo['id'];
//9b3d8191bc595c18b90674be92cbb08c
//f331f65dd41b4cf79c3e4c95a76b3145
$invite = M("FriendInvite");
$re = $invite->where("uid = $uid")->find();
//dump($re);
if($re['token']!=$token) $this->error('来路不正确请检查!');
setcookie("friend_invite",$uid,time()+86400,"/");
//redirect("/Jihuo");
//$this->display('jihuoye:index');
$this->index(); }
注册成功后增加接口,判断用户状态写入到数据库:
1: 成功
2:和主推广同ip不同电脑
3:和住推广不同ip同电脑
4:和主推广同ip同电脑
5:已经通过推广注册过一次的人同电脑同ip
6:已经通过推广注册过一次的人同ip不同电脑
7:已经通过推广注册过一次的人不同ip同电脑。
public function friend_invite($sentid,$sendusername){
//$uid = $this->getUserinfo('id');
$uid = $_COOKIE['friend_invite'];//主推广id
if(!$uid){
return ;
}
import('ORG.Util.String');
$invite = M("FriendInvite");
$invitelist = M("FriendInviteList");
$chickid = $_COOKIE['friend_invite_check'];//本机登录id
$chickregid = $_COOKIE['friend_invite_check_reg'];
$ip=get_client_ip();
$re = $invite->where("uid = $uid")->find();
$rrrrid = $re['id'];//OID
$checktong = $invitelist->where("id = $chickregid and oid = $rrrrid")->find();//判断本机cookie是否已经通过推广注册过。
$checktip = $invitelist->where("byqip = '$ip' and oid = $rrrrid")->find();//判断已通过推广链接注册的重复注册。
if($re['cip']!=$ip){//不同ip的写入
$data['oid']=$re['id'];
$data['uid']=$sentid;//注册的id
$data['username']=$sendusername;
$data['byqip']=$ip;
$data['byqregtime']=time();
if($chickid!=$uid){//和住推广不同cookie
if($checktong && $checktip){//和主推广不同ip,不同cookie,如果有注册过
$data['status']=5;//已经通过推广注册过一次,同cookie 同ip
}else if($checktip && !$checktong){
$data['status']=6;//已经通过推广注册过一次,同ip 不同cookie
}else if($checktong && !$checktip){
$data['status']=7;//已经通过推广注册过一次,不同同ip 同cookie
}else{
$data['status']=1;
}
}else{
$data['status']=3;//和主推广,不同ip 同cookie
} }else{
$data['oid']=$re['id'];
$data['uid']=$sentid;//注册的id
$data['username']=$sendusername;
$data['byqip']=$ip;
$data['byqregtime']=time();
if($chickid!=$uid){
$data['status']=2;//和主推广同ip不同cookie
}else{
$data['status']=4;//和主推广同ip同cookie
}
}
//dump($data);
$ll = $invitelist->add($data);
if($ll){//写入后更新主推广人信息
//$checkregid = $invitelist->where("id = $ll")->find();
setcookie("friend_invite_check_reg",$ll,time()+86400,"/");//生成推广链接后的checkcookie 防止同cookie注册重复注册
$count = $invitelist->where("status=1 and oid=$rrrrid")->count();
//echo $invitelist->getLastSql();
//exit;
//$count=7; test
if($count==3 && !$re['key']){
$randStr = String::randstring(16,5,'');
$data1['key']= $randStr;
$dkey['come_from']=1;
$dkey['promotion_code']=$randStr;
$dkey['code_create_time']=time();
$dkey['remark']="2测推广好友赠送";
M('ElectrumPromotion')->add($dkey);
}
$rel = $invite->where("id = $rrrrid")->find();
if($count > $rel['invite']){
if($count>0 && $count <=5){
$data1['electurm']=$rel['electurm']+300;
}else if($count>5 && $count <=10){
$data1['electurm']=$rel['electurm']+200;
}else if($count>10 && $count <=15){
$data1['electurm']=$rel['electurm']+150;
}else if($count>15 && $count <=20){
$data1['electurm']=$rel['electurm']+100;
}else if($count>20 && $count <=29){
$data1['electurm']=$rel['electurm']+50;
}else if($count==30){
$data1['electurm']=$rel['electurm']+1800;
}
$data1['invite']=$rel['invite']+1;
}
$data1['id']=$rrrrid;
$data1['lastupdatetime']=time();
$invite->save($data1); //dump($count);
}
//dump($re);
//$data[''] }
黄聪:URL推广系统防作弊的更多相关文章
- 移动端推广APP防作弊机制之依我见
本文来自网易云社区 在广告投放过程中,虚假流量常常给广告运营人员带来麻烦,影响广告投放的效果,如何预防作弊,不妨先来重现一下流量产生的场景,用户点击广告之后,一般都会落到广告主的网页,或者安装广告主的 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图: 从上图我们可以 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(八) Unity Dependency Injection and Interception
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(八) Unity Dependency Injection and Interception 依赖注入容器Uni ...
- 黄聪:如何使用Add-on SDK开发一个自己的火狐扩展
火狐开放了扩展的开发权限给程序员们,相信很多人都会希望自己做一些扩展来方便一些使用. 我最近做一些项目也需要开发一个火狐扩展,方便收集自己需要的数据,因此研究了几天怎么开发,现在已经差不多完成了,就顺 ...
- IOS防作弊产品技术原理分析
由于时间和水平有限,本文会存在诸多不足,希望得到您的及时反馈与指正,多谢! 工具环境: iPhone 6.系统版本 10.1.1IDA Pro 7.0 0x00:防作弊产品介绍 1.由于IOS系统的不 ...
- WEB系统防退出账户,回退主页问题(2020最新最有效的方式没有之一)
WEB系统防退出账户,回退主页问题(2020最新最有效的方式没有之一) 很多小伙伴在web开发中都遇倒的问题? JavaWeb项目注销后,可能存在通过浏览器缓存回退的方式进入主页系统 WEB项目 ...
- 黄聪:《跟黄聪学WordPress插件开发》
续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...
- 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性
<? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...
- 黄聪:《跟黄聪学WordPress主题开发》
又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...
随机推荐
- mybatis+spring的简单介绍学习
参考下面链接 http://mybatis.github.io/spring/zh/index.html
- Baxter机器人---测试准备(一)
原创博文,转载请标明出处:--周学伟http://www.cnblogs.com/zxouxuewei/ baxter:http://sdk.rethinkrobotics.com/wiki/Work ...
- leetcode 97 Interleaving String ----- java
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...
- ed编辑器使用
evilxr@IdeaPad:/tmp$ ed aa.c 0 a enter another words hello nice www.evilxr.com . w aa.c 46 q a 表示添加内 ...
- 26 个 jQuery使用技巧
1. 禁用右键点击(Disable right-click) $(document).ready(function(){ $(document).bind("contextmenu" ...
- java的nio之:java的nio系列教程之java的io和nio的区别
当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...
- dictEntry **table;
typedef struct dictht { dictEntry **table; PORT_ULONG size; PORT_ULONG sizemask; PORT_ULONG used;} d ...
- 网络-CIDR地址分类介绍
CIDR(Classless Inter Domain Routing)改进了传统的IPv4地址分类.传统的IP分类将IP地址直接对应为默认的分类,从而将Internet分割为网络.CIDR在路由表中 ...
- 018. ADO.NET _DataSet_DataAdapter
DataSet对象是支持ADO.NET的断开式或分布式数据方案的核心对象; DataAdapter对象是一种用来充当DataSet对象与实际数据源之间的桥梁 的对象, 所以二者结合访问数据库中数据模式 ...
- 007. 自定义ListBox的item的宽高, 字体居中
/// <summary> /// 自定义ListBox的item的宽高, 字体居中 /// </summary> /// <param name="sende ...