大家都来说说防止重复提交的各种招。。

xuexijava 2009-08-20 10:37:05
加精
如题。。。。
1、点击按钮提交
2、F5或刷新页面
3、Ctrl+N后提交
等等情况
...全文
2838 110 打赏 收藏 转发到动态 举报
写回复
用AI写文章
110 条回复
切换为时间正序
请发表友善的回复…
发表回复
chailiangyu 2012-03-28
  • 打赏
  • 举报
回复
提交完成后,将页面刷新一次。
再次提交之前,判断下。
wuyigong111 2012-03-27
  • 打赏
  • 举报
回复
我总结的几点:
1、Struts 的token机制
2、在页面JS上全局变量计数器,判断本页是否已经提交该表单,如果已经提交了则不让提交,可以给出提示。
3、提交后数据库有所变化,如果不是模态窗口并且没用 token 机制所以无法防止多个页面的提交,则直接在后台判断,如果数据库已经有所变化,则跳转到新页面给出提示。
sunhao901001 2012-03-27
  • 打赏
  • 举报
回复
我做的是提交之后到成功页面,按F5不停刷新,不停入库,想用令牌做,但是用的框架是封装stratus2框架,令牌被封没了。提交的字段有没有唯一的,有的话就在action拿唯一值去表中查询,看有没有,有就返回错误页面。
FristFlay 2011-05-09
  • 打赏
  • 举报
回复
我觉得呢,用js是真的不安全!
GavinXu1980 2010-09-17
  • 打赏
  • 举报
回复
控制重复提交无非就是两种方式:客户端控制 、服务器端控制
1、客户端控制无非就是使用 js 灰屏、灰按钮、禁用浏览器按钮及功能键、过滤鼠标键盘输入
这些功能虽然有效 但是很多地方也是无法生效的,毕竟是在客户端的东西,可以比如Firfox就可以调试js脚本,所以安全级别还是差一些

2、服务器段控制,也就是通常所说的Token,即每次都给客户端一个随机编号,提交后与服务器匹配。比较经典的就是Struts使用的Token机制了。
_Nick_ 2010-09-08
  • 打赏
  • 举报
回复
- - 重定向就不会有这个问题了。 转发引起的,这是根源
zings 2010-04-09
  • 打赏
  • 举报
回复
mark。。
pxs7758521 2010-04-07
  • 打赏
  • 举报
回复
提醒我了。。
hexiaoliang 2010-04-01
  • 打赏
  • 举报
回复
点之后马上刷新
dgqbcht 2009-10-22
  • 打赏
  • 举报
回复
这个简单,提交完把按钮 display:none掉
牛仔十三 2009-10-22
  • 打赏
  • 举报
回复
学习了
dyl999 2009-09-02
  • 打赏
  • 举报
回复
js

function hidbutton()
{
if(window.document.readyState!=null && window.document.readyState!='complete')
{
//判断页面是否执行完毕
//alert("数据加载中,请您稍等!");
//document.getElementById("btnRechargeList").display=false;
//查询按钮隐藏
document.getElementById("btnRechargeList").style.display="none";
//显示提示
document.getElementById("spanMsg").innerHTML="数据加载中,请您稍等!";
return false;
}
else
{
//alert("1");
//提示消息隐藏
document.getElementById("spanMsg").visible=false;
return true;
}
}

按钮应用
<asp:Button ID="btnRechargeList" runat="server" Text="查看消费清单" OnClientClick="hidbutton() OnClick="btnRechargeList_Click" /> <span id="spanMsg" style="color: red"> </span> </td>
dyl999 2009-09-02
  • 打赏
  • 举报
回复
js

function hidbutton()
{
if(window.document.readyState!=null && window.document.readyState!='complete')
{
//判断页面是否执行完毕
//alert("数据加载中,请您稍等!");
//document.getElementById("btnRechargeList").display=false;
//查询按钮隐藏
document.getElementById("btnRechargeList").style.display="none";
//显示提示
document.getElementById("spanMsg").innerHTML="数据加载中,请您稍等!";
return false;
}
else
{
//alert("1");
//提示消息隐藏
document.getElementById("spanMsg").visible=false;
return true;
}
}

按钮应用
<asp:Button ID="btnRechargeList" runat="server" Text="查看消费清单" OnClientClick="return btnCheck()" OnClick="btnRechargeList_Click" /><span id="spanMsg" style="color: red"></span></td>
chwoyaofei 2009-08-26
  • 打赏
  • 举报
回复
采用重定向好像也可防止重复提交
chwoyaofei 2009-08-26
  • 打赏
  • 举报
回复
在action中:
if( !isTokenValid(request,true) ){
System.out.println("重复提交!");
saveToken( request );
request.setAttribute("","");
return mapping.findForward("");
}

saveToken( request );

在页面上控制:
使用js将提交按钮屏蔽
xjbx 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 92 楼 javadaydayup 的回复:]
我用的是最简单的方法,当点完提交按钮的时候,把这个按钮“灰掉”,即不可编辑模式
[/Quote]
恐怕这个也不简单
javadaydayup 2009-08-26
  • 打赏
  • 举报
回复
我用的是最简单的方法,当点完提交按钮的时候,把这个按钮“灰掉”,即不可编辑模式
zhangshuling 2009-08-26
  • 打赏
  • 举报
回复
struts 不用时令牌,可以这样

不用return mapping.findForward("....");
用 response.sendRedirect("....."); return null;

我的愚见...
BJTUMach 2009-08-26
  • 打赏
  • 举报
回复
学习
lxf001002 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 78 楼 kala197 的回复:]
引用 1楼到最后1000楼 我的回复哈哈 的回复:
很好玩
哈哈 引用的漏洞
[/Quote]

这家伙真无聊
加载更多回复(90)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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