请高手指教,如何限制IP规定时间内发帖次数需要用到什么代码?什么函数?

解决方案 »

  1.   

    嘿嘿,php很多东西都是需要自己去扩展实现的!
    楼上的就不错。我的一个论坛的评论就差不多是这样做的!
    你需要建一个ip和发布时间的表(ips)
    在你发帖提交处理页面
    用$ip=$_SERVER['REMOTE_ADDR'];得到用户的ip
    然后查一下ips里面相应ip有没有,没有就直接发布,有就把对应的时间查出来($last_time)
    比如你的限制时间是5分钟,你就可以这样判断if($last_time+300<time()){}else{}当然这是在你存的是秒的情况下!提交成功的时候更新一下ips表,这样应该够清楚了吧?
      

  2.   

    $_SERVER中有IP,你可以在session中记录发帖时间,当下次发帖的时候判断时间是否符合发帖规则就行了
      

  3.   

    也可以把ip存入xml文件当中,在对比判断,以减少数据库负载
      

  4.   

    想的太简单了吧,如果通过某个公司内部代理上网,所有员工通过$_SERVER获得的IP都是一样,难道你让人家一个公司的人只能发几条贴吗?
      

  5.   

    如果我退出再登陆的话session会重新创建  ,这个方法行不通……
      

  6.   

    楼主的意思是 ‘限制IP规定时间内发帖次数'
    所以不考虑相同ip对策。
    简单的用条件搜索。
    比如搜索 5分钟内该ip发帖数量,如果有,则不能发。
      

  7.   

    $ip=get_ip(); //你的获取IP函数
    $timestep=20; //假设时间隔20秒
    $dir='iptem'; //手动建立存放IP的文件夹if(file_exists($dir.'/'.$ip)){
      if(time()-filemtime($dir.'/'.$ip)<$timestep){
        die('发帖间隔请大于'.$timestep.'秒!');
      }else{
        touch($dir.'/'.$ip);
      }
    }else{
      touch($dir.'/'.$ip);
    }
      

  8.   

    $ip=get_ip(); //你的获取IP函数
    $timestep=20; //假设时间隔20秒
    $dir='iptem'; //手动建立存放IP的文件夹if(file_exists($dir.'/'.$ip)){
      if(time()-filemtime($dir.'/'.$ip)<$timestep){
      die('发帖间隔请大于'.$timestep.'秒!');
      }else{
      touch($dir.'/'.$ip);
      }
    }else{
      touch($dir.'/'.$ip);
    }
    这个可以用于多用户吗?
      

  9.   

    前面各位已经说得很全面了,我再补充一点:如果你的目标只是“限制IP规定时间内发帖次数”,而不准备对发帖的IP地址、时间做永久的日志记录的话,应该用“基于内存的cache”,而不是数据库,如果一定要用数据库,也应该考虑 NoSQL。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)