普通HTML表单的防止重复提交

本文介绍了一种基于随机数生成的防重复提交令牌机制。该机制通过在客户端表单中嵌入隐藏字段,并在服务器端验证此字段与会话中保存的随机数是否一致来实现。若一致则更新令牌,否则视为非法提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流程 如下: servelet(生成令牌*随机数*保存到session) ===> 编辑页面(代有HTML的普通FORM表单,表单里有一个HIDDEN )===提交数据 ===>servelet(HIDDEN值跟SESSION里的值比较* 重新生成令牌)

servelet:
/**
* 生成一个10位的随机数,用字符串表示
* @return 返回生成的1000位的随机数
*/
public String createAutoNum() {
char[] num = new char[10];// 生成一个1000位的char数组
Random ran = new Random();// 随机数类
int temp;// 存放当前随机数
char cur;// 存放当前字符
for (int i = 0; i < num.length; i++) {
temp = ran.nextInt(10);// 生成一个0-9的随机数
cur = (char) ('0' + temp);// 转化成char型的数字
num[i] = cur;// 放到数组的当前位
}
return new String(num);// 返回这个随机数(用字符串形式)
}


HttpSession session = httpServletRequest.getSession();
session.setAttribute("qdtoken", createAutoNum());//设置命令牌


//编辑页面
String qdtoken = (String)request.getSession().getAttribute("qdtoken");
<input type="hidden" name="qdtoken" value="<%=qdtoken %>" />

servelet :

HttpSession session = request.getSession();
if(qdtoken.equals(session.getAttribute("qdtoken"))){//检查是否重复提交
session.setAttribute("qdtoken", createAutoNum());
}else{

session.setAttribute("qdtoken", createAutoNum());//提交令牌 防止重复提交
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值