接口验证每个ip每小时只能访问2次(自己实验:有待改进)

<?php
    // echo md5("user");die;
    /*
    查询
        接口地址:http://apis.juhe.cn/mobile/get
        支持格式:json/xml
        请求方式:get
        请求示例:http://localhost/day9.8/port.php?key=c7d81b6949462e2f1bb5fdf18dd1d006&id=用户id&dtype=xx
    请求参数说明:
         id      int     是     用户id
          key     string     是     应用APPKEY(应用详细页查询)
          dtype     string     否     返回数据的格式,xml或json,默认json
      返回参数说明:
           error_code     int     返回码
          reason     string     返回说明
          result     string     返回结果集
    */
      // 模拟
      // $key=c7d81b6949462e2f1bb5fdf18dd1d006;
      // $id=1;
      // 接收用户信息
      $key=$_GET['key'];
      $id=$_GET['id'];
      // 如果用户写dtype接收值,没有默认json
      $dtype=isset($_GET['dtype'])?$_GET['dtype']:'json';
      // 服务器生成key值和用户key值对比
      $app_key=md5("news$id");
      // if ($app_key!=$key) {
          // echo "非法请求";die;
      // }
    /**
     * 验证每小时只能使用2次
     */
    if (!isset($_COOKIE['name'])) {
      setcookie('name','');
    }
    // var_dump($_COOKIE);die;
    if (!isset($_COOKIE['name']['ip'])) {
      setcookie('name[ip]',$_SERVER['REMOTE_ADDR']);
    }
    if (!isset($_COOKIE['name']['num'])) {
      setcookie('name[num]',1);
    }
    // var_dump($_COOKIE['name']['num']);die;
     if (@!isset($_COOKIE['name']['h'])) {
      setcookie('name[h]',date("H"));
    }
    // var_dump($_COOKIE['name']);die;
    // 每小时重置一次
    if (@$_COOKIE['name']['h']!=date("H")) {
      setcookie('name[num]',0);
      setcookie('name[h]',date("H"));
    }
    // 超过2次禁止
    if (@$_COOKIE['name']['num']<2) {
      // 生成接口
      $pdo=new PDO("mysql:host=localhost;dbname=news","root","root");
      $pdo->exec("set names utf8");
      // 得到数据库的内容
      $sql="select * from hao123";
      $data=$pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
      if ($dtype=='xml') {
        // 生成xml格式数据
        header("content-type:text/xml;charset=utf8");
        echo "<?xml version='1.0' encoding='utf-8'?>";
        echo "<news>";
        foreach ($data as $key => $value) {
          echo "<new>";
            echo "<title><![CDATA[{$value['link']}]]></title>";
            echo "<link><![CDATA[{$value['title']}]]></link>";
          echo "</new>";
        }
      echo "</news>";
      }else{
        // 生成json格式数据
        header("content-type:text/html;charset=utf8");
        echo json_encode($data,JSON_UNESCAPED_UNICODE);
      }
        @setcookie('name[num]',$_COOKIE['name']['num']+1);
    }else{
        die('同一ip一小时之内只允许访问2次');
    }
      
 ?>
posted @ 2016-09-09 11:49  wepe  阅读(284)  评论(0编辑  收藏  举报