一个收费下载系统,采用PHP控制用户下载文件,计数。收费是基于下载次数的。现在的问题是无法控制客户端使用何种方式下载,很多下载工具默认都有监视下载的功能,
如果用户使用多线程工具下载(如迅雷),会造成下载计数不准确。请问大家有无这方面的解决办法?以前见过某些下载站点的下载可以绕过下载工具的监视,直接弹出IE下载对话框,不知这是如何实现的呢?
解决方案 »
- 如何获取到一个页面echo出来的数据?
- 怎样在apache服务器启动时候设置全局变量数组到内存??
- 关于php读取sql server时小数点的问题
- 急!请教ZF中使用Sybase的问题??
- 有谁知道这条语句中的点起什么作用echo '<p align="center"><a href="index.php?id='.$id.'">'.get_string('backtoparticipants').'</a></p>';
- 关于序列化CheckBox的顺序问题.
- 请问win iis环境下如何做进程间的互斥?
- php的函数中参数的命名规范是怎样的?
- 这可能不是一个简单的问题
- 取多值
- 求一个正则表达式!
- 为什么在本机上smarty可用,到了liunx系统下smarty里的display就不能用 了
至于盗链 根据链接随机生成加密路径 文件名之类的可以考虑.
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) 的值为今天;}
}
}
}