zoukankan      html  css  js  c++  java
  • 接口验证每个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次');
        }
          
     ?>
  • 相关阅读:
    iOS 发送位置消息
    集成 jpush-react-native 常见问题汇总 (iOS 篇)
    RESTful API 最佳实践
    RESTful API 设计指南
    理解RESTful架构
    PHP 调用 shell
    Laravel Model updating&updated 事件使用注意事项
    sudo 命令报 unable to resolve host 导致反应速度变慢
    Nginx设置禁止通过IP访问服务器并且只能通过指定域名访问
    Homestead can not mount nfs on macos catalina
  • 原文地址:https://www.cnblogs.com/wepe/p/7424634.html
Copyright © 2011-2022 走看看