当前位置:首页 > 开发 > 编程语言 > JSP > 正文

Jsp 防止二次提交(重复提交)

发表于: 2011-09-29   作者:dudong0726   来源:转载   浏览次数:
摘要: servlet页面代码:@每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复提交,如果不是则重新产生一个   token存于session中覆盖原来的token。 @当用户返回或者刷新重复请求servlet时,servlet判断token是否一致,由于

servlet页面代码:@每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复提交,如果不是则重新产生一个   token存于session中覆盖原来的token。

@当用户返回或者刷新重复请求servlet时,servlet判断token是否一致,由于请求方没有产生新的token,所以和servlet新产生的token不一致,认为重复提交。

@当用户在请求页面刷新也就是重新在请求页面产生token,这时新的token覆盖servlet产生的token,这时token一致,认为是一个新的请求。

@请求的jsp页面代码:
< body >
    
<%
           
long  token = System.currentTimeMillis();     // 产生时间戳的token
            session.setAttribute( " token " ,token);    
           
    
%>
    
< form  action = " isRepeat "  method = " post " >
        
< input type = " text "   name = " username " />
        
< input type = " text "   name = " password " />
        
< input type = " hidden "  value = " <%=token %> "  name = " token " />     <!--  作为hidden提交  -->
        
< input type = " submit "  value = " 提交 " />
    
</ form >
</ body >

 

@servlet页面代码:

 protected void doPost(HttpServletRequest req, HttpServletResponse resp)

             throws  ServletException, IOException {
         req.setCharacterEncoding(
" utf-8 " );
         resp.setCharacterEncoding(
" utf-8 " );
         resp.setContentType(
" text/html,charset=utf-8 " );
         String username
= req.getParameter( " username " );
         String password
= req.getParameter( " password " );
         
long  token = Long.parseLong(req.getParameter( " token " ));
         
long  tokenInSession = Long.parseLong(req.getSession().getAttribute( " token " ) + "" );
         
if (token == tokenInSession){
            resp.getWriter().println(
" ok  " );
                        
// 如果是第一次请求,则产生新的token 
                        req.getSession().setAttribute( " token " , System.currentTimeMillis());
             
         }
         
else
         {
             
            resp.getWriter().println(
" do not repeat submit " ); 
         }
    }

Jsp 防止二次提交(重复提交)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
简单的防止重复提交,没用拦截器配置 <%@ page language="java" contentType="text/html; charse
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能
session案例-防止表单重复提交 l不足:但用户单击”刷新”,或单击”后退”再次提交表单,将导致表
用户重复提交同一个HTML表单的原因不外乎两种:一是操作失败;二是某个表单的处理时间过长而是用户
概述 有些时候,我们在想某个网页提交了信息之后,由于某些原因,我们会重复点击提交,或者刷新页面
思路来源维基百科:http://en.wikipedia.org/wiki/Post/Redirect/Get 下图为传统POST传递方式: 下图
1、在网络延迟会或服务器反应过慢的情况下让用户有时间点击多次submit按钮导致表单重复提交 2、用户
用户重复提交同一个HTML表单的原因不外乎两种:一是操作失败;二是某个表单的处理时间过长而是用户
index.jsp: 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <
struts如何利用Token(令牌)防止用户重复提交?在我们的开发中经常遇到需要防止用户重复提交的情况
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号