表单重复提交
来源:互联网 发布:神机妙算软件升级 编辑:程序博客网 时间:2024/05/22 01:49
第一种情况:在提交表单时,如果网速较差,可能会导致点击提交按钮多次,这种情况也会导致表单重复提交。
- 解决方法:点击提交按钮之后,使按钮不可用。通过js完成
<script type="text/javascript"> window.onload = function(){ //获取按钮的对象 var btn = document.getElementById("btn"); //为按钮绑定单击响应函数 btn.onclick = function(){ //点击以后使按钮不可用 this.disabled=true; //当将提交按钮设置为不可用时,会自动取消它的默认行为 //手动提交表单 this.parentNode.submit(); }; };</script><br><br><form action="${pageContext.request.contextPath }/SessionServlet" ><br>user:<input type="text" name="username"><br>password<input type="password" name="pwd"><br><input type="submit" value="提交" id="btn"> <br></form>
第二种情况:表单提交成功以后,直接点击浏览器上回退按钮,不刷新页面,然后点击提交按钮再次提交表单。
- 根本原因:因为服务器在处理请求时,不会检查是否为重复提交的请求。
- 解决方案:
使用一个token的机制
- token就是令牌的意思
- 服务器在处理请求之前先来检查浏览器的token
- token由服务器来创建,并交给浏览器,浏览器在向服务器发送请求时需要带着这个token
- 服务器处理请求前检查token是否正确,如果正确,则正常处理,否则返回一个错误页面
- 服务器所创建的token只能使用一次
- token一般使用一个唯一的标识
- 在jsp页面,获取uuid作为token
- UUID:32位字符串,通常作为对象或者表的唯一标识,根据机器码和时间戳(从1970年1月1日开始到现在)生成。
<%@page import="java.util.UUID"%>
<% String uuid = UUID.randomUUID().toString(); session.setAttribute("uuid", uuid);%><br>${errormsg }<br><form action="${pageContext.request.contextPath }/SessionServlet" ><br> <input type="text" name="uuid" value="<%=uuid %>"/><br> user:<input type="text" name="username"><br> password<input type="password" name="pwd"><br> <input type="submit" value="提交" "><br></form>
表单重复提交的危害:
- 向数据库中插入大量的重复且没有意义的数据,占用服务器的资源
- 处理请求服务器并没有检查请求是否为重复的请求,导致恶意的攻击
原文转载
阅读全文
0 0
- 防止表单重复提交
- 解决表单重复提交
- 防止重复提交表单
- 避免表单重复提交
- 避免表单重复提交
- 表单的重复提交
- 避免表单重复提交
- 限制表单重复提交
- 表单重复提交
- 防止表单重复提交
- 防止表单重复提交
- 防止表单重复提交
- 防止表单重复提交
- 防止表单重复提交
- JSP表单重复提交
- jsp表单重复提交
- 防止表单重复提交
- 解决表单重复提交
- MacOS系统使用系列-3.Mac命令行命令学习
- 3招解决Nginx实现404页面的实现!
- 简单的切水果游戏制作
- Periodic Strings 字符串匹配
- oh-my-zsh配置(出事故后能用的一个版本)
- 表单重复提交
- 适用于Linux的最佳照片应用
- 数据库--基础知识
- JDBC API
- 初学c++重载函数
- 统计每个单词在输入中出现的次数
- 让Eclipse像IntelliJ IDEA那样智能提示
- Maven本地仓库和JDK默认版本配置
- 著名VC告诉你投资AI初创公司需要考虑的三大要素