[ASP.NET教程] 防止表单重复提交

简介: [ASP.NET教程] 防止表单重复提交

第一种方法: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);
            }
        }
    }
}
相关文章
|
7月前
|
开发框架 JSON JavaScript
ASP.NET Core3.1实战教程---基于Jquery单文件上传
ASP.NET Core3.1实战教程---基于Jquery单文件上传
86 0
|
19天前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
2月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
2月前
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
48 7
|
3月前
|
SQL 关系型数据库 数据库
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
|
4月前
|
开发框架 .NET API
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
202 3
|
7月前
|
开发框架 .NET 物联网
.NET从入门到精通,零基础也能搞定的基础知识教程
.NET从入门到精通,零基础也能搞定的基础知识教程
161 0
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
75 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
56 0
下一篇
DataWorks