环境:asp.net 2.0
问题:文件下载的时候需要用户登录并且扣除相应的积分,用IE下载的时候没有问题。可是当用flashget等多线程工具下载
的时候,积分会被重复扣除。
曾经想过的办法: 下载的时候用session记住本次下载,然后再次来的时候判断是否下载过,是的话不扣积分。就是一个资源只扣一次积分。后来发现这个办法不是很管用,可能因为多线程实在太快了,session的值还没付上,第二个线程就来了。
问题:文件下载的时候需要用户登录并且扣除相应的积分,用IE下载的时候没有问题。可是当用flashget等多线程工具下载
的时候,积分会被重复扣除。
曾经想过的办法: 下载的时候用session记住本次下载,然后再次来的时候判断是否下载过,是的话不扣积分。就是一个资源只扣一次积分。后来发现这个办法不是很管用,可能因为多线程实在太快了,session的值还没付上,第二个线程就来了。
解决方案 »
- 各位推荐一个强大,轻量级的AOP框架。如果自己想实现简单的框架,需要知道些什么?
- .net关于session的stateserver问题,急急急!!!!
- 为什么我的视频上传到服务器上会出现please contact the application support team for more informatio
- asp.net弹出窗口总在最前面如何实现
- 数据分页绑定的问题
- 页面A包含页面B,怎么做?
- asp.net mvc viewdata with json & javascript
- 求过渡界面
- 双击Button1事件竟然跑到前台去了。
- 关于自定义类的问题
- 如何获得DateGrid中项模板中模板列里lable控件的值(附图高手进,在线)
- 焦点从一个框架的文本框转到另一个框架的文本框,请进!
但是这个session判断好像对于多线程不好用,基本是无视
建一个下载记录的表,把每个用户下载的记录都保存在里面(存文件也可以)
那就可以根据(用户ID+资源ID)来判断数据库里面是否下载过了啦?
其实暂时多扣了也没有关系,在后台你可以有一个job定期去检查,发现都扣了可以返还就可以了。就像出口退税一样,先按照规则把税收了,则按照一定的规则去返回,也就说说分两部走!
那就可以根据(用户ID+资源ID)来判断数据库里面是否下载过了啦?
当然是多线程的情况,要按步骤来扣积分就不会重复扣了:
1.下载文件;
2.把(用户ID+资源ID)写入下载记录表;
3.根据下载记录表里面的记录来扣用户总积分;
那就可以根据(用户ID+资源ID)来判断数据库里面是否下载过了啦?
当然是多线程的情况,要按步骤来扣积分就不会重复扣了:
1.下载文件;
2.把(用户ID+资源ID)写入下载记录表;
3.根据下载记录表里面的记录来扣用户总积分;
当然要检查,不然怎么可以防止重复下载不扣积分,检查这种操作不会增加程序复杂度,你用存储过程实现也只是多了个IF而已?if not exists(select * from 下载记录表 where 用户ID=用户ID and 资源ID=资源ID)
begin
写下载记录表
扣除积分
end
特别是
wangkun9999
HDNGO 两位