如何在php上限制一个ip一天只能注册10个账户,注册多了不允许

 我来答
句心后端开发
2018-11-30 · 专注后端和移动端编程
句心后端开发
采纳数:316 获赞数:624

向TA提问 私信TA
展开全部

思路:

获取访问用户ip,查询数据库判断该ip是否可以继续注册新用户

示例

/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/11/30
 * Time: 19:35
 * 限制一个ip一天只能注册10个账户
 * 获取访问用户ip,查询数据库判断该ip是否可以继续注册新用户
 */
//获取数据库实例
$dsn = 'mysql:dbname=test;host=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上,欢迎点星网页链接

大笨熊
2018-11-29 · 心有多大,就能飞得有多高,飞得有多高!
大笨熊
采纳数:92 获赞数:173

向TA提问 私信TA
展开全部
首页:要用户表里面加入 注册ip,注册时间字段,在注册成功后,要把用户注册的时间与ip写入到数据库,
然后就是限制问题,在用户注册的时候,先查询用户表里面当天用户的ip 记录是否大于10条,如果大于,就给用户提示 ip注册已满,反之则继续注册。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魔龙冬雪血魔
2018-12-28 · TA获得超过171个赞
知道小有建树答主
回答量:216
采纳率:61%
帮助的人:76万
展开全部
这样哈看你可以理解不
用数据库多建立一个字段每次添加的时候就有一个ip存入数据库中
然后用当天的时间匹配出来
//添加IP地址以数组的形式
$requestArr['user_ip'] = $_SERVER['REMOTE_ADDR'];
//添加的时间
$requestArr['addtime'] = $date();
//从数据库取出来 ip重复校验
$if_ip = $Model->if_ip_cont($requestArr['user_ip']);
if ($if_ip > 10 and 什么时间就可以了)
{

$this->error('提交次数过多请稍后再试...');

}
*****
时间你添加下就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
胖子阿亚
2018-12-22 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:221
采纳率:0%
帮助的人:78.3万
展开全部

可以用redis memcache 或者mysql做一个计数器

key:获取用户IP后,用PHP内置函数ip2long,把ip地址转为整数。并拼接上当天得日期date('Ymd');

例如   xxxxx_20180501

每次用户注册时把计数器数值加1,当计数器达到10后 不允许在注册。

获取IP地址方法:

function get_real_ip(){ 
    $ip=false; 
    if(!empty($_SERVER['HTTP_CLIENT_IP'])){ 
        $ip=$_SERVER['HTTP_CLIENT_IP']; 
    }    if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
        $ips=explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']); 
        if($ip){ array_unshift($ips, $ip); $ip=FALSE; }        for ($i=0; $i < count($ips); $i++){            if(!eregi ('^(10│172.16│192.168).', $ips[$i])){                $ip=$ips[$i];                break;
            }
        }
    }    return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
茉香啵奶茶
2018-12-25 · 超过14用户采纳过TA的回答
知道答主
回答量:66
采纳率:52%
帮助的人:13.1万
展开全部
方法好多种,都可以实现。ssdb技术或者记录在数据库也可以做。现在(数据库方式)举例:数据库(user)表中记录每个用户注册时的ip,添加注册的时候把当前的ip记录在数据库,当然注册的时候也有注册时间的,然后每次添加一条数据的时候,查询统计一下(当天时间以内同一个ip的数量),超过了就不允许再注册了。xmj-livelife
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(28)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式