PHP结合Redis来限制用户或者IP某个时间段内访问的次数
16lz
2021-01-22
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//获取客户端真实ip地址
function get_real_ip(){
static $realip;
if(isset($_SERVER)){
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$realip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else if(isset($_SERVER['HTTP_CLIENT_IP'])){
$realip=$_SERVER['HTTP_CLIENT_IP'];
}else{
$realip=$_SERVER['REMOTE_ADDR'];
}
}else{
if(getenv('HTTP_X_FORWARDED_FOR')){
$realip=getenv('HTTP_X_FORWARDED_FOR');
}else if(getenv('HTTP_CLIENT_IP')){
$realip=getenv('HTTP_CLIENT_IP');
}else{
$realip=getenv('REMOTE_ADDR');
}
}
return $realip;
}
//这个key记录该ip的访问次数 也可改成用户id
$key = get_client_ip(); //该Key记录访问的次数,目前是以IP为例,也可以把用户id作为key,如userid_123456
//限制次数为3次。
$limit = 3;
$check = $redis->exists($key);
if($check){
$redis->incr($key);
$count = $redis->get($key);
if($count > 3){
exit('已经超出了限制次数');
}
}else{
$redis->incr($key);
//限制时间为60秒
$redis->expire($key,60);
}
$count = $redis->get($key);
echo '第 '.$count.' 次请求';
更多相关文章
- 使用JOIN获取有关两个用户的信息
- PHP:如果用户没有按下提交按钮,则Mysql回滚多个查询(通过ajax完成)
- Zend数据库适配器-未捕获异常-堆栈跟踪显示用户名和密码
- 在MySQL数据库中存储无法访问的用户
- init-connectMysql对用户操作加审计功能
- mysql user表root 用户修改权限后出现无法访问数据库的解决方法
- Linux下修改MySQL初始密码、开启远程登录、授权远程登录用户
- 保存在Java桌面应用程序应用程序和网站上使用的个人用户设置的最
- 确定记录出现的次数