有个极度郁闷的问题。。大家帮我看看。

canyue1980 2010-07-23 10:42:48
我有一个程序实现这样一个功能,每个注册用户每天只能点击一次领取奖励。

但是呢,有的用户他网络比较卡,往往点一次,没有反映,然后就猛点猛点。。结果。。就被点了N次。。得到好多奖励啊。

流程是这样的 点击后,检查用户领取记录当天有没有领过,如果领过,就返回已领。如果没有,update用户资料,添加积分。insert用户领取记录。
...全文
143 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
总哈哈 2010-07-23
  • 打赏
  • 举报
回复
JS加后台验证,这样很保险。
PIGer920 2010-07-23
  • 打赏
  • 举报
回复
程序判断上肯定有bug
Alfredknox 2010-07-23
  • 打赏
  • 举报
回复
最好还是用js验证,每次点击时都先把按钮变灰(即不可用),等执行完再变回来,这样应该可以得到保证了吧!希望能帮到你lz
江南昆虫 2010-07-23
  • 打赏
  • 举报
回复
应该是服务器端验证没做好吧...
amani11 2010-07-23
  • 打赏
  • 举报
回复
检查程序执行逻辑吧。

就算没锁表操作,

如果不是并发量非常大,常常出现,这种情况,不太正常
gumwzg 2010-07-23
  • 打赏
  • 举报
回复
网络有延迟 还是不行

直接用js把那个按钮变灰了
quzhongxiong 2010-07-23
  • 打赏
  • 举报
回复
把按钮变灰吧
number123456 2010-07-23
  • 打赏
  • 举报
回复
按理说无论他向服务器发送多少条请求,他也有个顺序,只要有其中一条执行了,期它的就应该是都不执行才对。

你可以用JS来做下效果
例如:

<input type="submit" name="领取" onclick="get(this)" >
<script>
function get(this){
// 先让他点一下就不能再点了,
this.disabled = true;
//然后用AJAX发送请求
ajax 代码
//如果返回成功了,那么把这个按钮给删除了,
//如果返回没成功,则把这个按钮再变成可用,并提示没成功
}
</script>
canyue1980 2010-07-23
  • 打赏
  • 举报
回复
这就是我的郁闷之处。。难道是我服务器配置问题。。。。这个理论上就算他多点了,那么也是前面点的先执行。。。是不是,后面点的判断过去就能识别出来他点过了,那么后面的就无效了,但是这个。。他好像同时执行了一样。
fancyivan 2010-07-23
  • 打赏
  • 举报
回复
怎么会呢,点第二次的时候,会判断用户已经领过了。
可以用js在前台做一下限定,在第一次点击后没有返回结果前,点再多也没用。
canyue1980 2010-07-23
  • 打赏
  • 举报
回复
嗯。。现在只能用Ajax等有返回结果后,按钮才变得可用。。。

试试。。不知道会不会产生这样的结果。同时在线一般在800左右。。不知道压力下会不会出现别的情况。。这个情况难道大家都没有遇到过吗?我觉得好像蛮普遍的。。。
benzzy 2010-07-23
  • 打赏
  • 举报
回复
可能是点第一次之后,还没插入数据,就来了点击第二次的事件。
因此,最好是在点了之后,先将该按钮变灰,再处理时间,这样就不会出现点击两次以上的情况了
canyue1980 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 kyzy_yy_pm 的回复:]
引用 12 楼 xuzuning 的回复:
只能说你的程序有问题

有时候卡,程序根本就没来得及作反应,就像腾讯的群空间右上角的那个鲜花了什么的,每天点击只可一次,可是常常可以点击很多次(只要不停就可以一直点)
[/Quote]

对的,就是类似于这个问题了。。。呵呵。。用JS可能好一点,但是如果人家恶意的呢,这个就麻烦了。。
有没有在PHP端判断的方法,是不是和线程之类的有关呢,还有就是执行顺序,并发数什么的方面限制呢?
zhaoyu0826 2010-07-23
  • 打赏
  • 举报
回复
用JS点击之后加个遮盖层,延迟个3秒,谁都别点了。他网速慢,机器总不会也慢吧。嘿嘿
kyzy_yy_pm 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xuzuning 的回复:]
只能说你的程序有问题
[/Quote]
有时候卡,程序根本就没来得及作反应,就像腾讯的群空间右上角的那个鲜花了什么的,每天点击只可一次,可是常常可以点击很多次(只要不停就可以一直点)
kyzy_yy_pm 2010-07-23
  • 打赏
  • 举报
回复
首先在客户端判断两次点击的时间(在客户端用时间限制,一定时间内不可再点,客户端判断应该很快吧),然后再在php页面判断
张小莱 2010-07-23
  • 打赏
  • 举报
回复
用JS加验证,点击之后把按钮设置为不可点击
dahaidao 2010-07-23
  • 打赏
  • 举报
回复
看一下你判断那个地方是怎么写的。
xuzuning 2010-07-23
  • 打赏
  • 举报
回复
只能说你的程序有问题
lizhike 2010-07-23
  • 打赏
  • 举报
回复
操作的时候加上功能锁 试试

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧