通过session 怎么防止表单的重复提交!
1.在提交表单的时候使用隐藏域;
String tokenValue=new Date().getTime();
<input type="hidden" name="token" value="<%=tokenValue%>"/>
2.往session中添加一个随机值;
request.getSession().setAttribute("token",tokenValue);
3.在servlet中对隐藏域的值和session中的值作比较;
servlet 中
String tokenValue=request.getParameter("token");
String sessionToken=request.getSeesion().getAttribute("token");
if(sessionToken !=null && ressionToken.equals(tokenValue)){
request.getSession().removeAttribute("token");
}
<%@ page import="java.util.Date" %><%--
Created by IntelliJ IDEA.
User: ty
Date: 2017/4/12
Time: 11:17
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<htm/l>
<head>
<title>Title</title>
</head>
<body>
<%
String tokenValue=new Date().getTime()+"";
request.getSession().setAttribute("token",tokenValue);
%> <form action="<%=request.getContextPath()%>/token1" method="post">
<input type="hidden" name="token" value="<%=tokenValue%>" />
username:<input type="text" name="username"/> <br>
<input type="submit" value="submit"> </form>
</body>
</html>
package main.java.servlet; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; /**
* Created by ty on 2017/4/12.
*/
@WebServlet(name = "TokenProcessServlet",urlPatterns = "/token1")
public class TokenProcessServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} String username = request.getParameter("username");
String tokenValue = request.getParameter("token");
Object sessionToken = request.getSession().getAttribute("token");
response.getWriter().print("sessionToken===="+sessionToken+">>>");
System.out.println("tokenValue="+tokenValue);
System.out.println("sessionToken="+sessionToken);
if(sessionToken != null && sessionToken.equals(tokenValue)) {
request.getSession().removeAttribute("token");
response.sendRedirect(request.getContextPath()+"/successful.jsp");
}else{
response.sendRedirect(request.getContextPath()+"/error1.jsp");
return ;
} } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}
通过session 怎么防止表单的重复提交!的更多相关文章
- Session机制三(表单的重复提交)
1.表单的重复提交的情况 在表单提交到一个servlet,而servlet又通过请求转发的方式响应了一个JSP页面,这个时候地址栏还保留这servlet的那个路径,在响应页面点击刷新. 在响应页面没有 ...
- php-- 避免表单的重复提交
用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...
- Spring MVC表单防重复提交
利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RU ...
- HttpSession解决表单的重复提交
1). 重复提交的情况: ①. 在表单提交到一个 Servlet, 而 Servlet 又通过请求转发的方式响应一个 JSP(HTML) 页面, 此时地址栏还保留着 Serlvet 的那个路径, 在响 ...
- Struts2 - 表单的重复提交问题
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- 使用aop注解实现表单防重复提交功能
原文:https://www.cnblogs.com/manliu/articles/5983888.html 1.这里采用的方法是:使用get请求进入表单页面时,后台会生成一个tokrn_flag分 ...
- HttpSession之表单的重复提交 & 验证码
如果采用 HttpServletResponse.sendRedirct() 方法将客户端重定向到成功页面,将不会出现重复提交问题 1.表单的重复提交 1). 重复提交的情况: ①. 在表单提交到一个 ...
- struts2 文件的上传下载 表单的重复提交 自定义拦截器
文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...
- php中如何防止表单的重复提交
在php中如何防止表单的重复提交?其实也有几种解决方法. 下面小编就为大家介绍一下吧.需要的朋友可以过来参考下 代码: <?php /* * php中如何防止表单的重复提交 * by www.j ...
随机推荐
- 一维码Codabar简介及其解码实现(zxing-cpp)
一维码Codabar:由4条黑色线条,3条白色线条,合计7条线条所组成,每一个字元与字元之间有一间隙Gap做区隔. 条形码Codabar包含21个字元: (1).10个数字0~9; (2)." ...
- java spring 等启动项目时的异常 或 程序异常的解决思路
今天搭建ssm项目的时候,因为pagehelper的一个jar包没有导入idea的web项目下的lib目录中,异常报错找不到pagehelper,这个问题在出异常的时候疯狂crash,让人心情十分不舒 ...
- sqlyog 可视化查看数据库关系并创建外键
+ 一个架构设计器,把表拖进来即可查看数据库关系 如果要建立外键,需要在两个要被建立的外键之间进行操作(经过验证不需要都为主键),然后从用鼠标把子外键拖到父外键中,就可以关联上了. 参考: https ...
- $(document).ready(function() 与window.onload
$(document).ready(function() window.onload 事件是页面完全加载完的时候执行$(function(){ }) 是等页面上的标签加载完了就执行 页面加载完成后开始 ...
- systemctl start nginx timeout
昨儿个研究docker ,搭建私有仓库.想着用nginx代理一下仓库地址.方式使用80端口,于是愉快的下载,编辑,安装nginx.创建nginx.service作为系统启动服务. 结果......,多 ...
- 腾讯云服务器linux Ubuntu操作系统搭建ftp服务器vsftpd
腾讯云服务器linux Ubuntu操作系统安装ftp服务器vsftpd 操作系统: Ubuntu Server 16.04.1 LTS 64位 下面我将系统重装, 一步一步从头开始,安装FTP服务器 ...
- [PLC]ST语言七:MOV_SMOV_CML_BMOV_FMOV_XCH_BCD_BIN
一:MOV/SMOV/CML/BMOV/FMOV/XCH/BCD/BIN 说明:简单的顺控指令不做其他说明. (MOV)控制要求:无 (MOV)编程梯形图: (MOV)结构化编程ST语言: (*传送指 ...
- 开始认真的学习Python
虽然以前有多年的Fortran.C.C++以及Java开发经验,但真的开始熟悉Python还是被惊艳到了,太舒服了,看起来有如沐春风的感觉,简洁和优美,这个才是代码艺术.
- 《杜增强讲Unity之Tanks坦克大战》2-场景设置
2 场景设置 2.1 本节效果预览 2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹 Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源, ...
- 2.3 Oracle之DDL 语句(约束、伪列、视图、序列、同义词) 精简版
DDL Data Definition(重点) (n. 定义:[物] 清晰度:解说)用于定义数据的结构,创建,修改,删除数据库对象 一.表的增删改查 1.创建表:CREATE TABLE temp A ...