用token解决,你可以直接在百度中搜索“java中处理重复提交”。还有就是可以用一个布尔型的标记,提交后就把值变下,在提交的前都去判断这个值。
web前端数据请求或者表单提交往往通过对dom的点击事件来操作,但是往往因为认为点击过快(少年手速挺快的嘛),或者因为响应等待使得用户误人为没操作而重复很多次点击,造成表单数据的连续重复提交,造成用户体检的不好,甚至影响到整个系统的安全性。而前端的防治重复提交至少很有效的防治了人为正常操作下的很多不必要麻烦。下面就来讲讲如何有效避免前端的表单重复提交表单提交有以下几种方式:form name=”form” method=”post” action=”#" input type=”submit” name=”submit” value=”提交" /form 另外,还有一种常用的方法是使用图片:代码如下:form name=”form” method=”post” action=”# " input type=”image” name=”submit” src=”btnSubmit.jpg” /form 第三种是使用链接来提交表单,用到了javascript的DOM模型:代码如下:form name=”form” method=”post” action=”#” a href=”javascript:form.submit();”提交/a /form 实际上这一种是通过js 进行提交。可以理解成 $("form").find("a").click(function(){ $("form").submit(); }); 第一种和第二种可以用js来:$("input[type='submit']").click(function(){ $("form").submit(); }); $("input[name='submit']").click(function(){ $("form").submit(); }); 总之,都是对form进行提交,当然还有出了表单提交还有些请求也要防治重复,比如响应某个事件的ajax请求(提交数据)$.ajax({ url: url, type: "post", data: data, success: function (data) { callback; } }); 那么前面这些提交和请求在网络和性能因素上导致不能及时网络响应并且在事件多次响应时造成的重复,除非在提交响应完成前的点击(触发事件)视为无效,等当前响应完了再去响应下一个请求如果是表单按钮我们可以这样在点击后将按钮disabled掉$("input[type='submit']").click(function(){ $(this).attr("disabled", true); $("form").submit(); }); 按道理来说,将点击后将按钮disabled设为true时按钮就不能点击了那么第二次以后点击就无效了,但这样做你会发现同时第一次点击的表单也无法正常提交了(好像是h5的标准后才不行的,无论怎样h5标准的浏览器我试了试都不行),看来是disabled影响了表单的提交,那么先提交后disabled看行不行$("input[type='submit']").click(function(){ $("form").submit(); $(this).attr("disabled", true); }); 实验结果 ,这样也不行,我们不能猜想submit()回调在click函数最后执行并且.submit()函数内部应该对disabel做了判断(假设这是浏览器内部机制原理),反正在当前这个交互周期里disabled了就不能submit那么我们可以抛开disabled用代码逻辑来防治重复$("input[type='submit']").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $("form").submit(); } }); 在当前点击的按钮如果没有repeat的话就进入提交并且设置个值为true的repeat属性,当第二次进来的时候发现有这个属性就不提交,看似这样的逻辑会防治重复提交了,但是事实永远都是残酷的!是的,当点击过快的时候还是会重复提交,这是因为,如果click里没执行submit的时候html默认的type=submit 的input点击操作会提交表单,举个完整的例子form name=”form” method=”post” action=”#" input type=”submit” name=”submit” value=”提交" /form form name=”form” method=”post” action=”#" input type=”submit” name=”submit” value=”提交" /form $("input[type='submit']").click(function(){ console.log("here is click too!"); }); form name=”form” method=”post” action=”#" div提交/div /form $("form").find("div").click(function(){ $("form").submit(); }); 这三个代码都是一个效果提交表单,但是!!!!!!!!!!我们发现阻止表单提交的不就是在当前交互周期(一次点击-》响应-》回调)里,将submit按钮disabled掉吗,好的,少年上代码$("form").find("div").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $(this).closest("form").submit(); }else{ $(this).attr("disabled", true); } }); 看到没有,第二次点击的时候就disabeld掉了,所以只有第一次成功,第二次的就不会提交了!当然,如果是其他dom元素防治重复点击那就更简单了$("div").click(function(){ if(!!$(this)[0].isRepeat){ return; } $(this)[0].isRepeat=1; $.ajax({ url: url, type: "post", data: data, success: function (data) { $(this)[0].isRepeat=0; callback; } }); }); 因为submit()会刷新试图,而ajax不会,所以在回调后需要把判断重复的那个属性赋值为false这是不是就更简单?我想你会这样认为的!以上所述是小编给大家介绍的JS WEB 前端开发中防治重复提交的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
加一个全局变量,发送请求将变量设置为false,请求处理完毕后,或超时后,或用回调函数,将变量设置为true,这样的话当这个变量为false就拒绝重复提交嘛。
所谓的“三握手”:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据 量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP 在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP 总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。 [编辑本段]三次握手-释意TCP握手协议
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
三次握手协议第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。
SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
[1] * SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
*ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
*RST:复位标志
复位标志有效。用于复位相应的TCP连接。
*URG:紧急标志
紧急(The urgent pointer) 标志有效。紧急标志置位,
*PSH:推标志
该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
*FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。 [编辑本段]三次握手协议-工作原理由于TCP 需要时刻跟踪,这需要额外开销,使得TCP 的格式有些显得复杂。下面就让我们看一个TCP 的
三次握手协议经典案例,这是后来被称为MITNICK 攻击中KEVIN 开创了两种攻击技术:
TCP 会话劫持和SYN FLOOD(同步洪流)
在这里我们讨论的是TCP 会话劫持的问题。
先让我们明白TCP 建立连接的基本简单的过程。为了建设一个小型的模仿环境我们假设有3 台接入互联网的机器。A 为攻击者操纵的攻击机。B 为中介跳板机器(受信任的服务器)。C 为受害者使用的机器(多是服务器),这里把C 机器锁定为目标机器。A 机器向B机器发送SYN 包,请求建立连接,这时已经响应请求的B 机器会向A 机器回应SYN/ACK表明同意建立连接,当A 机器接受到B 机器发送的SYN/ACK 回应时,发送应答ACK 建立
A 机器与B 机器的网络连接。这样一个两台机器之间的TCP 通话信道就建立成功了。B 终端受信任的服务器向C 机器发起TCP 连接,A 机器对服务器发起SYN 信息,使C 机器不能响应B 机器。在同时A 机器也向B 机器发送虚假的C 机器回应的SYN 数据包,接收到SYN 数据包的B 机器(被C 机器信任)开始发送应答连接建立的SYN/ACK 数据包,这时C 机器正在忙于响应以前发送的SYN 数据而无暇回应B 机器,而A 机器的攻击者预测出B 机器包的序列号(现在的TCP 序列号预测难度有所加大)假冒C 机器向B 机器发送应答ACK 这时攻击者骗取B 机器的信任,假冒C 机器与B 机器建立起TCP 协议的对话连接。这个时候的C 机器还是在响应攻击者A 机器发送的SYN 数据。
TCP 协议栈的弱点:TCP 连接的资源消耗,其中包括:数据包信息、条件状态、序列号等。通过故意不完成建立连接所需要的三次握手过程,造成连接一方的资源耗尽。通过攻击者有意的不完成建立连接所需要的三次握手的全过程,从而造成了C 机器的资源耗尽。序列号的可预测性,目标主机应答连接请求时返回的SYN/ACK 的序列号是可预测的。
心动女友8000钻石兑换码如何下载 心动女友,如果你确实喜欢的话,可以发起攻击,努力的追求。游戏人物设计逼真,玩法丰富有趣,在这里玩家可以和真人互动,乐趣十足,赶紧来墨鱼下载站下载试试吧!心动女友安锋...
怎么破解无线网络密码【安全密钥】 WEP的好办...WPA2就算了...高强度加密....目前还不能破解要破解WEp的话 消息我 告诉你详细的方法(也不好办)破解无线网络wifi密码的方法 现...
我现在用的是中望cad2009试用版,试用30天,我现在能不能把它破解呢? 你好,买车险前请一定要认真看下面这篇文章,看完不踩坑~车险太贵,可以只买交强险吗?一定要知道,不然上路会吃亏!其实老司机都知...
ipad不越狱能玩破解游戏吗?????? 可以。1、用自带浏览器搜索“快用苹果助手”,上他的管网下载一个“快用苹果助手”,下载好后打开,放到后台不要关。2、用电脑下载一个“快用苹果助手”,然后用数据线...
谁能帮我找到真正破解版的蜜桃约会app?(就是内购免费版) 过来人告诉你,内购是不可能内购的,免费这辈子都不可能,这些app就是靠付费骗钱的,很多打着内购免费的app都是带病毒的,事已至此,只好劝你修...
苹果手机能用的一键无痕 在手机自带的safari浏览器界面点击右下角窗口图标。点击下方起始页选项,弹出窗口点击无痕浏览。在无痕浏览模式下点击左下角+号,即可开启无痕浏览页面。首先点击打开苹果手机自带浏...