您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

web防止表单多次提交的方法

时间:2019-07-18 15:56:24  来源:  作者:

web防止表单多次提交的方法

表单提交, 应该是每个网页都会存在的一个内容。比如填写用户信息,填写个人资料。

向后台传送数据。那么可能就会有一些捣乱的用户,或者恶意工具服务器的

他可能多次点击提交按钮。导致服务器需要解析多次请求

那么就会出现问题。增加服务器压力。

解决方案1:

通过js ,定义一个全局变量。默认是false,当用户点击提交按钮。把全局变量该为true.

当用户点击第二次提交,会如果是true就不再执行提交。

代码如下

<script type="text/JAVAscript">

var isCommitted = false;//表单是否已经提交标识,默认为false

function dosubmit(){

if(isCommitted==false){

isCommitted = true;//提交表单后,将表单是否已经提交标识设置为true

return true;//返回true让表单正常提交

} else {

layer.msg("您已经提交过了,信息正在查询请您耐心等待..")

return false;//返回false那么表单将不提交

}

}

</script>

其次需要在表单onsubmit="return dosubmit()"

用户点击提交之后默认转到该方法下执行代码

以上一种解决方案,只能解决不懂技术的,小白用户 但是不能从根本上解决问题

还有一种方式 就是 在服务器做验证。这也是最佳的解决方案 (推荐使用这种方式)

这种解决方案简单概括就是:

用户点击跳珠表单页面,会默认生成一个token值。token值可以是uuid+算法生成的唯一值。方式多种多样都可以

然后把这个token值放入session中,后台可以通过el表达式把通过key拿出token值,存入form表单中的hidden隐藏表单中

用户每次提交,连同表单数据和这个token值发送到服务器。服务器去校验这个token值。

首先校验这个token值你要知道有几种情况

第一种:

表单中没有token,代表他重复叫

第二种

当前session中没有token,则用户代表重复提交

第三种

存储在session中的token令牌与表单Token不同,则代表用户重复提交

每种情况都要考虑进去,

直接干代码!!不说废话了

上面几种情况 我会单独 写出一个工具类

/**

* 判断客户端提交上来的令牌和服务器端生成的令牌是否一致

* @param args

* true:表示重复提交

* false:表示没有重复提交

*/

public static boolean isRepeatSubmit(HttpServletRequest request) {

String client_token = request.getParameter("token");

//第一种情况,如果提交表单没有token则该用户是重复提交表单

if (client_token == null){

return true;

}

//取出来存储在session中的令牌

String server_token = (String) request.getSession().getAttribute("token");

//2、如果当前用户的Session中不存在Token(令牌),则用户是重复提交了表单

if (server_token == null){

return true;

}

//3、存储在Session中的Token(令牌)与表单提交的Token(令牌)不同,则用户是重复提交了表单

if (!client_token.equals(server_token)){

return true;

}

return false;

}

2 跳转页面生产token值

//该方法主要用于跳转JSP页面,并且防止多次提交创建token

@RequestMApping(value = "findLogisticsPrice")

public String findLogistics(HttpServletRequest request, HttpServletResponse response){

String token = TokenUtils.getAccessToken(UUID.randomUUID().toString());

request.getSession().setAttribute("token", token);

return "modules/logisticsproviders/freightEstimateIndex";

}

生成token值的代码为:

/**

* 描述:生成Token方法

* @return

*/

public static String getAccessToken(String uuid){

String key = "UZ";

String timestamp = String.valueOf(System.currentTimeMillis());

return HmacSHA256((uuid+timestamp).getBytes(),key.getBytes());

}

3 在业务层直接处理逻辑

//判断用户是否是重复提交

boolean b = TokenUtils.isRepeatSubmit(request);

if (b==true){

String ze = "请不要重复提交!!!";

return ze;

}

当业务层逻辑快执行完时候

//移除session中的token

request.getSession().removeAttribute("token");



Tags:表单   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1. 简介我们都知道前台的验证只是为了满足界面的友好性、客户体验性等等。但是如果仅靠前端进行数据合法性校验,是远远不够的。因为非法用户可能会直接从客户端获取到请求地...【详细内容】
2021-08-11  Tags: 表单  点击:(70)  评论:(0)  加入收藏
本节我们讲HTML表单标签,当你在网页输入框提交一个数据,这条数据一般是提交给了服务器,然后服务器根据请求返回你想要的数据,这个你输入信息的输入框或者提交的按钮就是HTML表...【详细内容】
2021-06-25  Tags: 表单  点击:(141)  评论:(0)  加入收藏
基于 el-form 封装了一个表单控件,包括表单的子控件。 既然要封装,那么就要完善一些,把能想到的功能都要实现出来,不想留遗憾。 毕竟UI库提供的功能都很强大了,不能浪费了对吧。 ...【详细内容】
2021-05-19  Tags: 表单  点击:(195)  评论:(0)  加入收藏
知识要点 1、:valid 用于匹配输入值为合法的元素2、:invalid用于匹配输入值为非法的元素3、required 属性规定必需在提交之前填写输入字段4、pattern 属性规定用于验证输入...【详细内容】
2021-03-03  Tags: 表单  点击:(259)  评论:(0)  加入收藏
问:如何用 JS 一次获取 HTML 表单的所有字段 ?考虑一个简单的 HTML 表单,用于将任务保存在待办事项列表中: <form> <label for="name">用户名</label> <input type="text...【详细内容】
2020-10-12  Tags: 表单  点击:(76)  评论:(0)  加入收藏
今天给大家讲解一下帝国CMS7.5的用户提交表单,比如在线报名、反馈信息、留言等,可以帮助我们获得用户的信息,从而带来业务,实现方法如下:制作出来的效果如下:方法步骤:1、点击菜单...【详细内容】
2020-01-02  Tags: 表单  点击:(112)  评论:(0)  加入收藏
作者:季雨林 来源:https://www.opengps.cn/Blog/View.aspx?id=426关于怎么实现承载更多用户量的系统,一直是我重点关注的一个技术方向。改造架构提高承载力,通常来讲分为两个大...【详细内容】
2019-10-30  Tags: 表单  点击:(327)  评论:(0)  加入收藏
1. 列表列表总共有三种:无序列表、有序列表和定义列表。老师来给大家总结一下。无序列表:无序列表中列表项和列表项之间不分先后顺序。<ul> <li>列表项1</li> <li>列表项2</li...【详细内容】
2019-10-28  Tags: 表单  点击:(85)  评论:(0)  加入收藏
Facebook页面、Twitter账号、评论区等在线工具为网站访问者提供了许多与品牌互动的机会。而且在网站上给访问者提供了一个联系的方式。在自托管的WordPress网站上添加一个联...【详细内容】
2019-08-15  Tags: 表单  点击:(239)  评论:(0)  加入收藏
他们说大多数网络应用只是HTML表单。好吧,表单需要验证,谢天谢地,HTML5带有许多优秀的内置表单验证功能,可用于电子邮件,数字,最大值,分钟等。您甚至可以使用模式编写自己的验证规...【详细内容】
2019-08-12  Tags: 表单  点击:(219)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条