场景是这个样的,有位用户他网络环境不大理想,在做单子的时候发现点击确定后页面卡在哪里不动,于是他返回,又进入这个页面点击确认。这样就出现了重复的数据,关于这个问题我想了用同步做存完一个单子在存另一个,这个可以避免,但是这样性能非常低,特别是人多的时候做单子基本上都卡在那里。面对这个问题各位有什么好的办法吗?
[quote]不是连着点击两次,关键问题是上一次的数据,由于网络或者其他原因还没做完持久,他就返回又进入这个页面又点确定。[/quote]
做一个请求队列,在队列中查询重复的交易,这样不用去查询数据库了。
给每个单子一个唯一标识,并在后台保存它的提交状态,防止重复提交。
肯定可以避免啊,你得加上token来避免重复提交 假如是struts1,那么savetoken在页面,然后在action里面判断,假如是struts2,那么配置一个拦截器,并且在form表单中加一个s:token标签 就可以了
你这样肯定是不行的 你这个值必须是能判断是哪一次操作的,你每次变肯定判断不了。
其实token的原理就是,在页面生成一个token的隐藏表单,并且存入session,然后在action里面得到当前session里面的token判断,这个token是不是刚才那个token。 你是用的struts1还是2?
[quote]在做单子的时候发现点击确定后页面卡在哪里不动,于是他返回,又进入这个页面点击确认。这样就出现了重复的数据,[/quote]
不是点了两次确认吗?数据都提交到了后台?
我的意思就是把第二次提交过来的数据在数据库中查一下看看有没有重复的记录,如果有就说明他已经提交过来
唉 其实就是一个重复提交问题 何必想的这么复杂了。