php 문자 인증 코드 발송 횟수 제한 실례 설명 실현

6783 단어 php문자 발송
장면
등록,비밀번호 수정,비밀번호 찾기 등 장면 에서 우 리 는 핸드폰 문자 메 시 지 를 보 내 인증 코드 를 검증 하 는 것 을 만 날 수 있 습 니 다.우 리 는 핸드폰 의 이 문자 인 터 페 이 스 는 구 매 해 야 한 다 는 것 을 잘 알 고 있 습 니 다.브러시 를 방지 하기 위해 우 리 는 문자 인증 코드 의 발송 횟수 에 대한 제한 을 어떻게 방지 해 야 합 니까?
많은 사람들 이 이렇게 한다.사용자 가 문자 인증 코드 를 받 는 핸드폰 번호,ip,브 라 우 저(유일한 표지 사용)를 제한 하 는 것 이다.
본 고 에서 소개 한 방법 은 사용자 가 매일 같은 브 라 우 저 나 같은 ip 주 소 를 통 해 인증 코드 를 10 번 또는 같은 핸드폰 번호 로 문자 인증 코드 를 3 번 만 받 을 수 있 고 세 가지 제한 은'또는'관계 로 제한 되 며 한 가지 제한 을 초과 하면 인증 코드 를 보 내지 않 는 다 는 것 이다.방법 은 서버 에서 사용자 의 핸드폰 번호,ip,ur 를r 표지 가 파일 을 기록 하고 기록 한 다음 에 파일 기록 을 읽 어서 사용자 가 인증 코드 를 보 내 려 고 하 는 횟수 를 판단 하여 제한 합 니 다. 
방법 은 다음 과 같다.
문자 인증 코드 를 가 져 오 는 페이지 입 니 다:

<!DOCTYPE html>
<html>
<head></head>
<body>
<!--     uv_r  ,                ,          cookie 。                        (    js    ,     js  ) -->
<input type="hidden" name="uv_r" value="" id="uv_r">
</body>
<script type=”text/javascript”>
/*
  js  cookie ur_r    ,     ,      ,js  cookie,            。
*/
 //      cookie
    var _uuid = getUUID();
    if(getCookie("_UUID_UV")!=null && getCookie("_UUID_UV")!=undefined)
    {
      _uuid = getCookie("_UUID_UV");
    }else{
      setCookie("_UUID_UV",_uuid);
    }
    document.getElementById("uv_r").value = _uuid;//  hidden  
    //      
    function getUUID()
    {
      var uuid = new Date().getTime();
      var randomNum =parseInt(Math.random()*1000);
      return uuid+randomNum.toString();
    }
    // cookie
    function setCookie(name,value)
    {
      var Days = 365;//    cookie       
      var exp = new Date();
      exp.setTime(exp.getTime() + Days*24*60*60*1000);
      document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }
    //  cookie
    function getCookie(name)
    {
      var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
      if(arr=document.cookie.match(reg))
        return unescape(arr[2]);
      else
        return null;
    }
</script>
</html>
백 엔 드 PHP 문자 제한 횟수 등의 패키지 클래스:

Class regMod{
//      ,           
Protected $Root = null;
Public function __construct(){
$this -> Root = APP_PATH."/data/msg_logs/";//           
}
//         (Ajax    )
Public function get_authentication_code(){
if ($_POST['uv_r'] && $_POST['tel']) {
$ip=$_SERVER["REMOTE_ADDR"];//ip
  $tel = $_POST['tel'];//  
  $uv_r = $_POST['uv_r'];//ur_r  
  if(empty($uv_r)){
    $uv_r = 0;
  }
}
 
      //           
$uvr_num = $this->checkUvr($uv_r);
$tel_num = $this->checkTel($tel);
$ip_num = $this->checkIp($ip);
 
if ($uvr_num < 10 && $tel_num < 4 && $ip_num < 10) {
Echo "     ";//      ,        
} else {
Echo “      ”;
//        ,       ,      
$data = $tel . "|" . $ip . "|" . $uv_r . "|";
  if ($uv_r>0 && $uvr_num >= 10) {
    $data = $data . "A@";
  }
  if ($tel_num >= 4) {
    $data = $data . "B@";
  }
  if ($ip_num >= 10) {
    $data = $data . "C@";
  }
  $this->wirteFile("", $data);
  $this->ajax_return(0, "               !");//       ,ajax_return()     (   )
  }
}
//         
//  ur_r         
Private function checkUvr($data){
  $fileName = "Uv_".date("Ymd",time()).".dat";
  $filePath = ($this -> Root).$fileName;//           
  $c_sum = 0;
  if(file_exists($filePath)){//                   
    $arr=file_get_contents($filePath);
    $row=explode("|",$arr);
    $countArr=array_count_values($row);
    $c_sum = $countArr[$data];
    if($c_sum<10)
    {
      $this -> wirteFile($filePath,$data."|");
    }
    return $c_sum;
  }else{//                ,    0
    $this -> wirteFile($filePath,$data."|");
    return $c_sum;
  }
}
//  Tel         
Private function checkTel($data){
  $fileName = "Tel_".date("Ymd",time()).".dat";
  $filePath = ($this -> Root).$fileName;
  $c_sum = 0;
  if(file_exists($filePath)){
    $arr=file_get_contents($filePath);
    $row=explode("|",$arr);
    $countArr=array_count_values($row);
    $c_sum = $countArr[$data];
    if($c_sum<4)
    {
      $this -> wirteFile($filePath,$data."|");
    }
    return $c_sum;
  }else{
    $this -> wirteFile($filePath,$data."|");
    return $c_sum;
  }
}
//  IP         
Private function checkIp($data){
  $fileName = "Ip_".date("Ymd",time()).".dat";
  $filePath = ($this -> Root).$fileName;
  $c_sum = 0;
  if(file_exists($filePath)){
    $arr=file_get_contents($filePath);
    $row=explode("|",$arr);
    $countArr=array_count_values($row);
    $c_sum = $countArr[$data];
    if($c_sum<10)
    {
      $this -> wirteFile($filePath,$data."|");
    }
    return $c_sum;
  }else{
    $this -> wirteFile($filePath,$data."|");
    return $c_sum;
  }
}
/**
*          
* @param $filePath         
* @param $data      
*/
Private function wirteFile($filePath,$data){
try {
    if(!is_dir($this->Root)){//            ,      
      mkdir($this->Root, 0777, true);
    }
    if($filePath==""){//          ,         
      $filePath = ($this -> Root)."N".date("Ymd",time()).".dat";
    }
//      
    $fp=fopen($filePath,"a+");//    
    fwrite($fp,$data);// 
    fclose($fp);//  
  } catch (Exception $e) { print $e->getMessage();  }
}
 
}
다음 단 계 는 문자 제한 을 어디서 사용 해 야 하 는 지 하 는 것 이다.예 를 들 어 등록,비밀번호 찾기,비밀번호 수정 등 방법 에서 이 봉 인 된 종 류 를 직접 예화 하면 사용 할 수 있다.
php 가 문자 인증번호 발송 횟수 에 대한 제한 실례 설명 을 실현 하 는 데 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 php 가 문자 인증번호 발송 횟수 에 대한 제한 내용 을 실현 하 는 데 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시 면 앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기