要实现的功能:

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推广系统防作弊的更多相关文章

  1. 移动端推广APP防作弊机制之依我见

    本文来自网易云社区 在广告投放过程中,虚假流量常常给广告运营人员带来麻烦,影响广告投放的效果,如何预防作弊,不妨先来重现一下流量产生的场景,用户点击广告之后,一般都会落到广告主的网页,或者安装广告主的 ...

  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图:   从上图我们可以 ...

  3. 黄聪:Microsoft Enterprise Library 5.0 系列教程(八) Unity Dependency Injection and Interception

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(八) Unity Dependency Injection and Interception 依赖注入容器Uni ...

  4. 黄聪:如何使用Add-on SDK开发一个自己的火狐扩展

    火狐开放了扩展的开发权限给程序员们,相信很多人都会希望自己做一些扩展来方便一些使用. 我最近做一些项目也需要开发一个火狐扩展,方便收集自己需要的数据,因此研究了几天怎么开发,现在已经差不多完成了,就顺 ...

  5. IOS防作弊产品技术原理分析

    由于时间和水平有限,本文会存在诸多不足,希望得到您的及时反馈与指正,多谢! 工具环境: iPhone 6.系统版本 10.1.1IDA Pro 7.0 0x00:防作弊产品介绍 1.由于IOS系统的不 ...

  6. WEB系统防退出账户,回退主页问题(2020最新最有效的方式没有之一)

    WEB系统防退出账户,回退主页问题(2020最新最有效的方式没有之一) 很多小伙伴在web开发中都遇倒的问题? JavaWeb项目注销后,可能存在通过浏览器缓存回退的方式进入主页系统 ​​ WEB项目 ...

  7. 黄聪:《跟黄聪学WordPress插件开发》

    续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...

  8. 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性

    <? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...

  9. 黄聪:《跟黄聪学WordPress主题开发》

    又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...

随机推荐

  1. Letter Combinations of a Phone Number

    Given a digit string, return all possible letter combinations that the number could represent. A map ...

  2. 工作中遇到的问题--使用DTO减少数据字段

    Location中包含如下字段以及AMfgObject中关于创建信息的字段,然而有时使用并不需要传输那么多数据,则对其中字段进行过滤. @Entity@Table(name = "LOCAT ...

  3. 异步处理工具类:AsyncTask

    (一) AsyncTask,是android提供的轻量级的异步类.可以直接继承AsyncTask,在类中实现异步操作,可以通过接口实现UI进度更新,最后反馈执行的结果给UI主线程 .之所以有Handl ...

  4. php文件删除

    <?php $dirname="shangchuan/uploads"; deldir($dirname); function deldir($dirname){ if(fi ...

  5. P188 实战练习(父类和子类)

    1.创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法. 创建Computer父类: package org.hanqi.practise ...

  6. 【NOIP2010】引水入城

    以前一直以为是什么高端DP,看了题解才发现是水题,老是这样看题解才能写出来到赛场上怎么办嘛QAQ 原题: 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好 ...

  7. List of devices attached ???????????? no permissions

    如果显示如下:List of devices attached???????????? no permissions就要设置usb $ lsusbBus 005 Device 001: ID 1d6b ...

  8. kuangbin_UnionFind D (HDU 3038)

    加权并查集 似乎就是在想这题的时候突然理解了之前看E题没看懂的标准加权解法 值得注意的技巧 为了让区间之前连成树 形式设定为为(l, r] 接受l的输入后先自减一下就可以了 #include < ...

  9. java多线程之:SynchronousQueue队列

    SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然.同步队列没有任何内部容量,甚至连一个队列的容量都没有.      不能在同步队列上进行 peek ...

  10. Linux-配置虚拟IP实例

    在日常linux管理工作中,需要为应用配置单独的IP地址,以达到主机与应用的分离,在应用切换与迁移过程中可以做到动态切换,特别是在使用HA的时候,这种方案可以保证主机与应用的隔离,对日常的运维有很大的 ...