`
_Yggd
  • 浏览: 89860 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

web应用中怎么样限制用户只能提交一次表单请求

阅读更多
众所周知,浏览器客户端重复恶意提交可以导致服务器端性能急剧下降,
所以在浏览器端限制客户端的提交就显得有必要了
struts2的解决方法:

必须使用struts标签才能够做到表单的重复提交验证 
<font size="10">login</font> 
<s:form method="post" action="token/userLoginAction!login"> 
      <s:textfield name="username" value="zhangsan"></s:textfield> 
     <s:textfield name="password" value="pwd"></s:textfield> 
     <s:token></s:token>    
<s:submit value="login"></s:submit> 
</s:form> 


<package name="preventDoublePost" extends="struts-default" namespace="/token"> 
        <action name="userLoginAction" class="com.zyb.web.user.UserLoginAction"> 
            <interceptor-ref name="defaultStack"/><!-- 需要注意拦截器栈的配置顺序--> 
            <interceptor-ref name="token"/><!-- 这就是用来防止表单重复提交的拦截器--> 
            <result name="invalid.token">../doublePost.jsp</result><!-- 需要注意的是名字必须为invalid.token--> 
            <result name="success">../fileupload_success.jsp</result> 
        </action> 
</package> 


struts2的token标签重复提交还是在服务器端进行判断的

也可以通过客户端的js来进行判断:

<%@ page language="java" contentType="text/html; charset=Gb2312"%>
<html>
<head>
<title>客户端限制重复提交</title>
<script language="javascript">
    <!--定义重复提交标志变量 -->
     var repeatSubmitFlag = false;
    <!-- 重复提交检查函数 -->
    function checkSubmit()
    {
        if(repeatSubmitFlag) <!-- 如果标志为true,则说明页面已经提交 -->
        {
            window.alert('禁止重复提交!');
            return false;
        }
        else
        {
            repeatSubmitFlag = true;
            return true;
        }
    }
</script>
</head>
<body>
<center>
<form name="form_client" action="clientReceive.jsp"
onSubmit="return checkSubmit();">
用户名
<input name="username" type="text" size="12">
<br>
密&nbsp; 码
<input name="pwd" type="password" size="12">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" name="Submit" value="提交">
</form>
</center>
</body>
</html>


也可以这样写:

<%@ page language="java" contentType="text/html; charset=Gb2312"%>
<html>
<head>
<title>客户端限制重复提交</title>
</head>
<body>
<center>
<form name="form_client" action="clientReceive.jsp"
onSubmit="window.document.form_client.submitok.disabled=true; return true;">
用户名
<input name="username" type="text" size="12">
<br>
密&nbsp; 码
<input name="pwd" type="password" size="12">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" name="submitok" value="提交">
</form>
</center>
</body>
</html>


如果要在服务器端用session进行判断可以这样:


<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>用户登录页面</title>
</head>
<%
//设置标志变量SubmitFlag值original
session.putValue("SubmitFlag", "original");
%>
<body>
<center>
<form name="form_client" action="sessionReceive.jsp">
用户名
<input name="username" type="text" size="12">
<br>
密&nbsp; 码
<input name="pwd" type="password" size="12">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" name="Submit" value="提交">
</form>
</center>
</body>
</html>

后端判定:


<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>服务器端程序</title>
</head>
<body>
<%
String PageFlag;
PageFlag = (String) session.getValue("SubmitFlag");
if (PageFlag == "Over") {
out.println("不能重复提交页面!");
} else {
//设置标志变量SubmitFlag值为Over,表示已经提交
session.putValue("SubmitFlag", "Over");
//进入数据接收并处理程序代码
out.println("正在处理...请等待!!!");
//在此处添加数据处理代码
}
%>
</body>
</html>


分享到:
评论

相关推荐

    异步 提交表单请求

    在Java开发中,异步提交表单请求是一种常见的前端与后端交互方式,它通过Ajax技术实现,使得用户无需等待整个页面刷新即可完成数据的提交和获取,提升了用户体验。Ajax,全称Asynchronous JavaScript and XML(异步...

    试谈在Web应用中如何避免表单的重复提交.pdf

    (2) 用户提交了页面,服务器端首先判断请求参数中的令牌值和session中的令牌值是否相等,如果相等,则认为这是第一次提交,否则,为重复提交。 这种方法可以有效地避免表单的重复提交。但是,它也存在一些缺陷,...

    C# post方式提交Form表单

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、Web应用以及游戏等领域。本篇文章将深入探讨如何在C#中通过POST方式提交Form表单,包括其原理、步骤和实际代码示例。 一、POST提交表单的基本...

    台和web简单demo 3,表单提交 form get

    在本文中,我们将深入探讨与"台和web简单demo 3,表单提交 form get"相关的Web开发技术,特别是关于HTML表单、HTTP GET请求以及Java在Web应用程序中的作用。让我们逐一了解这些概念。 首先,表单(Form)是HTML语言...

    防止用户表单重复提交处理

    在Web开发中,用户表单重复提交是一个常见的问题,它可能导致数据冗余或者数据库状态的不一致。本示例提供了一种解决方案,包括在前端JavaScript和后端进行处理,以防止用户因网络延迟或误操作导致的多次提交。 ...

    防止Layui form表单重复提交的实现方法

    Layui是一种基于jQuery的前端UI框架,它提供了一套丰富的界面元素和组件,广泛用于构建快速响应的Web界面。在使用Layui设计表单时,经常会遇到表单提交后页面刷新导致的重复提交问题。为了解决这个问题,开发者需要...

    c#以POST方式模拟提交表单 - 真功夫

    ### C#以POST方式模拟提交表单 - 关键知识点解析 ...综上所述,通过C#实现POST方式模拟提交表单不仅可以提高Web应用程序的灵活性,还能在安全性方面提供更多保障。开发者应熟练掌握这些技术,并结合实际情况灵活运用。

    应用Web应聘表单

    在Web开发领域,创建一个应用应聘表单是常见的任务,尤其在招聘流程自动化的过程中。"应用Web应聘表单"是一个用于收集求职者信息的在线平台,它具备信息验证功能、日期选择器以及二级省市联动菜单,以确保提交的数据...

    springboot2.1+redis+拦截器 防止表单重复提交

    在现代Web应用开发中,防止表单重复提交是一项重要的任务,因为这可能导致数据不一致性和服务器资源浪费。本文将深入探讨如何使用Spring Boot 2.1、Redis和拦截器来实现这一功能。以下是对这个主题的详细解释: ...

    struts2中token限制表单多次提交

    通过以上步骤,我们可以利用Struts2的Token机制有效地限制表单的多次提交,提高Web应用的安全性和稳定性。在实际项目中,还可以根据具体需求进行调整,比如设置Token的有效时间、自定义Token生成策略等。

    Struts之Token解决表单那重复提交

    当用户提交表单时,服务器会生成一个唯一的Token,并将其存储在一个临时的会话属性中,同时将其返回给客户端(通常是隐藏在表单中)。客户端再次提交表单时,会将这个Token一起发送回服务器。服务器验证Token的有效...

    平台和web简单demo 3,表单提交 form get

    在IT行业中,Web开发是至关重要的一环,而表单提交是构建交互式Web应用程序的核心功能。本示例“平台和web简单demo 3,表单提交 form get”着重讲解了如何使用HTML表单进行GET请求,以及与Java后端平台的交互。 1. ...

    asp.net mvc3 表单提交和异步提交

    比如,当用户填写表单并点击提交时,JavaScript会捕获这个事件,阻止默认的表单提交行为,然后发送一个Ajax请求到服务器。这个请求通常通过JSON格式传输数据,服务器端的Action方法处理这些数据,完成后返回JSON或...

    asp.net 页面防止重复提交

    当用户提交表单时,设置一个标志,然后在后续的提交检查这个标志,如果发现已经提交过,则忽略新的请求。 此外,服务器端的事务管理也是防止重复提交的一种方式。在数据库操作中使用事务,确保一系列操作要么全部...

    struts+token机制解决表单重复提交

    Token机制的核心思想是在用户提交表单前生成一个唯一的、时间相关的令牌,并将其存储在用户的会话(session)或请求(request)中。当用户提交表单时,将这个令牌一起发送到服务器。服务器端验证令牌的有效性,如果...

    防止表单重复提交

    在Web开发中,表单提交是一项基础且关键的操作,它允许用户向服务器发送数据进行处理。然而,如果没有适当处理,可能会出现表单重复提交的问题,这可能导致数据的不一致性和服务器资源的浪费。本篇文章将深入探讨...

    修改禁止多次重复提交

    在IT行业中,尤其是在Web开发领域,防止用户多次重复提交数据是一项重要的任务,这可以避免数据库出现冗余数据,保持系统稳定。"修改禁止多次重复提交"这个话题涉及到前端交互、后端处理以及数据库操作等多个层面。...

    防止表单重复提交(asp.net )

    为了确保用户在提交表单时不会无意或有意地多次发送请求,我们需要实施有效的防止表单重复提交的策略。以下是一些关键知识点: 1. **表单重复提交的类型**: - **用户行为**:用户可能意外按下刷新按钮,导致已...

    Web编程(Java )-Servlet API中请求和响应的应用.doc

    在Web编程中,Java Servlet API是用于开发动态Web应用程序的核心技术之一。本实验主要探讨了如何使用Servlet API处理客户端的HTTP请求以及响应。实验的主要目标是实现一个简单的用户注册功能,涉及了表单数据的接收...

Global site tag (gtag.js) - Google Analytics