form表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题
(1)点击提交按钮两次。
(2)点击刷新按钮。
(3)使用浏览器后退按钮重复之前的操作 导致重复提交表单。
(4)浏览器重复的HTTP请求。
(5)用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交。
一 .用JavaScript 禁用提交按钮
二. 用Session防止表单重复提交:
在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌),同时在当前用户的Session域中保存这个Token。然后将Token发送到客户端的Form表单中,在Form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务器端,然后在服务器端判断客户端提交上来的Token与服务器端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务器端就可以不处理重复提交的表单。如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。
public class FormServlet extends HttpServlet { private static final long serialVersionUID = -884689940866074733L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String token = UUID.randomUUID().toString();//创建令牌 System.out.println("在FormServlet中生成的token:"+token); request.getSession().setAttribute("token", token); //在服务器使用session保存token(令牌) request.getRequestDispatcher("/form.jsp").forward(request, response);//跳转到form.jsp页面 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
原创作者:吴小糖
创作时间:2024.1.9
猜你喜欢
- 4小时前uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -我创建的投票列表实现
- 4小时前Debezium发布历史57
- 4小时前DevOps常用工具全家桶,实现高效运维和交付
- 4小时前Python爬虫淘宝手机数据可视化分析大屏全屏系统
- 4小时前1.机器学习-机器学习算法分类概述
- 4小时前VR全景直播,打开新视界的大门
- 4小时前Python中数据处理(npz、npy、csv文件;元组、列表、numpy数组的使用)
- 3小时前确认取消(红塘湾机场确认取消)
- 1小时前dnf打深渊装备碎片在哪里看(现在dnf深渊不爆装备了,碎片干什么用的)
- 54分钟前科一预约一直在受理中(科一预约一直在受理中怎么回事)
网友评论
- 搜索
- 最新文章
- 热门文章