第一种方法:javascript控制。缺点,一般用户使用没问题,但是懂点js的还是可以强行重复提交。而且,后退再提交,你也没啥办法。

第二种方法:服务器控制。
后台生成一个token,存入session或者其他缓存里面。渲染表单时,给form一个隐藏的token(令牌).
用户提交表单时:
先判断表单里面的token是否存在,不存在拒绝接受此数据;
如果存在token,判断此表单里的token是否和session里的token一致,如果不一致,拒绝处理数据;如果一致,处理表单,并从session里移除此token.
那么,当用户成功提交表单后,如果再次提交,会因为session里的token已删除,从而让服务器告诉用户“不要重复提交表单!”.

页面上的代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
   <form id="form1" runat="server">
    <asp:HiddenField ID="HiddenField1" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="提交"/>
    <div>
        
    </div>
    </form>
</body>
</html>

后台代码
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication2
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SetSession(); //首次加载的时候 给session 赋值 , 并给隐藏于  赋值,
            }
        }
        public void SetSession() 
        {
            Session["record"] = DateTime.Now.ToString();  //保存页面上的值到session中
            HiddenField1.Value = Session["record"].ToString();  
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if (HiddenField1.Value == Session["record"].ToString())  //当点击按钮时,他们的值一定是相等的
            {
                Page.ClientScript.RegisterClientScriptBlock(GetType(), "key","", true);
                //Response.Write(String.Format("<script>alert('{0}')</script>",Session["record"].ToString()));
                SetSession();    // 当执行的时候 如果是点按钮  session 和 隐藏于的值是相等的,    要是 刷新的话, session  是肯定变得但 隐藏于的 值 是缓存 里的 上一次的 ,这是  浏览器的一个  bug 
            }
            else
            {
                Page.ClientScript.RegisterClientScriptBlock(GetType(), "key", "alert('请不要重复提交');", true);
            }
        }
    }
}

[ASP.NET教程] 防止表单重复提交的更多相关文章

  1. [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  3. java防止表单重复提交

    用session防止表单重复提交 思路:在服务器端生成一个唯一的随机标识串Token,同时在当前用户的Session域中保存这个Token.然后将Token发送到客户端的Form表单中,在Form表单 ...

  4. java web学习总结(十三) -------------------使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  5. 使用Struts 2防止表单重复提交

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  6. js阻止form表单重复提交

    防止表单重复提交的方法总体来说有两种,一种是在js中阻止重复提交:另一种是在后台利用token令牌实现,大致思路是生成一个随机码放到session和form表单的隐藏输入框中,提交表单时两者对比,表单 ...

  7. PHP简单利用token防止表单重复提交

    <?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_S ...

  8. token防止表单重复提交

    出现表单重复提交的三种情况: 一.服务器响应缓慢,用户多次点击提交按钮. 二.提交成功后刷新页面. 三.提交成功后返回表单页面再次点击提交. package com.jalja.token; impo ...

  9. JavaWeb防止表单重复提交(转载)

    转载自:http://blog.csdn.net/ye1992/article/details/42873219 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用 ...

随机推荐

  1. 每次启动懂maven项目都必须关闭javaw.exe进程

    最近几天一致在搞配置问题,今天总于解决了.下面说问题: 我发现我每次配置完maven build的goals运行,总是会出现TOMCAT绑定接口问题,我做的方法就是不断地关掉JAVAw.exe进程.但 ...

  2. mysql简单主从复制(二)

    mysql的简单主从复制 主从复制打开后,各自开启的线程: master端 mysql> show processlist\G; *************************** 1. r ...

  3. CDH-5.7.1离线安装

    CDH-5.7.1离线安装 参考自:http://blog.csdn.net/jdplus/article/details/45920733   1.文件下载 CDH (Cloudera's Dist ...

  4. javascript如何用递归写一个简单的树形结构

    现在有一个数据,需要你渲染出对应的列表出来: var data = [ {"id":1}, {"id":2}, {"id":3}, {&qu ...

  5. Tomcat启动:Container StandardContext[] has not been started

    Container StandardContext[] has not been started\root.xml 初始化失败,检查数据源配置

  6. vue学习日志(一):vue的优势

    vue的中文官方文档里面有对比其他框架的具体介绍,这里只是做一个概括总结: 1,在 Vue 应用中,组件的依赖是在渲染过程中自动追踪的,所以系统能精确知晓哪个组件确实需要被重渲染.你可以理解为每一个组 ...

  7. 八,ESP8266 文件保存数据

    应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情 前面几篇 用AT指令版本的 一,  http://www.c ...

  8. 201521123091 《Java程序设计》第12周学习总结

    Java 第十一周总结 第十一周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 4.课后阅读 1.本章学习总结 1.1 以你喜欢的方式(思维导图 ...

  9. 201521123011 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:1.super() 子类不能继承父类的构造方法,但可以通过super关键字去访问父类的构 ...

  10. 201521123035《Java程序设计》第一周学习总结

     1.本周学习总结 本周学习了Java从诞生到如今的部分历史,并通过了老师的课堂演示了解了Java在cmd中的编译过程.然后还学习了JDK,JRE,JVM. 2. 书面作业 1.为什么java程序可以 ...