一个收费下载系统,采用PHP控制用户下载文件,计数。收费是基于下载次数的。现在的问题是无法控制客户端使用何种方式下载,很多下载工具默认都有监视下载的功能,
如果用户使用多线程工具下载(如迅雷),会造成下载计数不准确。请问大家有无这方面的解决办法?以前见过某些下载站点的下载可以绕过下载工具的监视,直接弹出IE下载对话框,不知这是如何实现的呢?

解决方案 »

  1.   

    在服务器端apache or ng 有模块可以加载.
      

  2.   

    首先要防盗链,其次用session控制,用下载工具的话session会不同的具体没做过,原理大概是这样
      

  3.   

    自己搜索一下 一个so.可以限制单线程 单IP之类的.
    至于盗链 根据链接随机生成加密路径 文件名之类的可以考虑.
      

  4.   

    根据IP+时间就能够很好的实现控制,例如说一天中每个ip下载只扣一次点
      

  5.   

    如果服务器是NGINX,它有限制线程下载的功能
      

  6.   

    我说说思路
    1,你可以首先获取来访者浏览器信息,如果非ie,ff等主流浏览器,你就给他die掉
    2,判断来访者的身份是否合法(例如是否已经登入成功)
    3,下载的时候给资源数据库的每一个资源都加入一列,用来记录用户id和时间,数据库格式如下
    ===================================================
    资源id  ......    下载用户id     下载时间(day)
    1       ......    |11|12|24|     |2|3|2|4,判断用户今天是否已经下载过的方法:假如我的id是12   
    select 下载用户id,下载时间(day) from 资源表 where 下载用户id like '%|12|%'
    if(没取到){
       允许用户下载,并且把用户的id和今天的day值分别写入
    }else{
       所有的用户id数组=explode(Rs['下载用户id'],'|');
       for($i=0;$i<count(所有的用户id数组);$i++){
          if(所有的用户id数组[$i]==12){
             所有时间的数组=explode(Rs['下载时间(day)'],'|');
             if(所有时间的数组[$i]==今天){
                 不允许下载
              }else{允许下载,并改写 下载时间(day) 的值为今天;}
          }
       }
    }