思路:
获取访问用户ip,查询数据库判断该ip是否可以继续注册新用户
示例
/*** Created by PhpStorm.
* User: Administrator
* Date: 2018/11/30
* Time: 19:35
* 限制一个ip一天只能注册10个账户
* 获取访问用户ip,查询数据库判断该ip是否可以继续注册新用户
*/
//获取数据库实例
$dsn = 'mysql:dbname=testhost=127.0.0.1'
$user = 'root'
$password = ''
try {
$db = new PDO($dsn, $user, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"))
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage()
}
//获取访问用户ip
$access_user_ip = $_SERVER['REMOTE_ADDR']
//查询数据库判断该ip是否可以继续注册新用户
$start_time = strtotime(date('Y-m-d'))//今天0点
$end_time = strtotime(date('Y-m-d').' +1 day ')//明天0点
$sth = $db->prepare('select count(*) from user where ip=:ip and created_at>:start_time and created_at<:end_time')
$sth->bindParam(':ip',$access_user_ip)
$sth->bindParam(':start_time',$start_time)
$sth->bindParam(':end_time',$end_time)
$sth->execute()
$count = $sth->fetchColumn()//当前该ip今天注册的用户总数量
if ($count>10){
exit('今天,您已注册10个新账号了,请明天再来吧')
}
源码放在github上,欢迎点星网页链接
时间格式用int型,您做起来就会简单的多,你只要做在一天凌晨到24点这个时间内,注册的个数<5就可以了!/**客户端IP
*/
function getClientIp(){
if(getenv('HTTP_CLIENT_IP')) {
$onlineip = getenv('HTTP_CLIENT_IP')
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR')
} elseif(getenv('REMOTE_ADDR')) {
$onlineip = getenv('REMOTE_ADDR')
} else {
$onlineip = $_SERVER['REMOTE_ADDR']
}
return $onlineip
}//必须用这个,否则很多时候是取不到客户端的ip的$thisDayStart=mktime(0,0,0,date("m"),date("d"),date("Y"))//mktime($h,$i,$s,$m,$d,$y)$thisDayStart=mktime(23,59,59,date("m"),date("d"),date("Y"))//mktime($h,$i,$s,$m,$d,$y)select count(id) from com_users where addtime>=".$thisDayStart." and addtime<".$thisDayStart."只要这个count(id)>=5了,就不能可以了
这不是一段代码就能解决的,我只能给你解决方案:1.修改保存用户注册信息的表,此表要有注册IP和注册时间字段;
2.当用户注册时,能过request对象取得用户的IP地址,然后到用户注册信息表中查询最后此IP的注册时间的记录,如果没有查到记录,那么允许此用户注册。如果查到记录,则判断注册时间是否超过24小时,如果超过也允许注册,否则不允许注册。
代码逻辑很简单,主要是表中要有注册IP和注册时间字段。这么简单的代码,就是根据条件查询数据,以及逻辑判断,只要是程序员应该都能写出来,当然还要结合你的程序来写,否则随便写段代码你也用不上。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)