免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1111 | 回复: 0
打印 上一主题 下一主题

多线程下重复提交问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-08 14:49 |只看该作者 |倒序浏览
  以前做项目一般几百用户,一台服务器,不做群集,自然很少去考虑多线程的问题。虽然这其中也存在多线程问题,但代码中并不会特别的关注,因为用户少,所以即使代码存在一些问题,本来就是小概率事件,能暴露出来更是少之又少,很幸运,以前一直没有碰到。
  现在做的项目,每天都有几万甚至十几万用户访问,三台server做群集,要考虑的问题也就多了。因为没有经验,也因为太相信liferay了,项目上线后,在几万用户的压力下,发现了很多奇怪的问题,前两天就碰到一个用户,竟然能跳过程序中的邮件验证,注册成功。研究了一个上午,终于发现是由于数据重复提交导致的。解决这个BUG有以下几点收获:
   1. 不能依赖客户端浏览器。 客户端浏览器种类很多,一般写程序只会考虑几个主流浏览器,如IE,Fixfox等,其他就不管了,这各种浏览器对JS的运行各不相同,在一个浏览器上测试通过的JS代码不能保证在其他浏览器上能通过,这些问题已经碰到过很多次了。上述BUG首先是由于提交按钮在某些浏览器下未被禁用导致的。
    2. 线程安全 考虑多线程的问题,尽量不要使用全局变量,对全局变量的修改应根据需要使用synchronized,避免同时修改同一变量。
   3. 避免重复提交 有增删修改数据的地方,在提交之后首先应采用JS禁用提交按钮,但不能依赖JS,程序中也应该加以判断,判断时应考虑多线程问题。因为重复提交很导致数据库出错,甚至更严重的后果。注意一点,重复提交一般是同一session,不同的request(一般request中的数据相同),所以在使用session或者request中的attribute时要特别注意。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25536/showart_255269.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP