2025年3月18日 星期二 甲辰(龙)年 月十七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

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

时间:03-14来源:作者:点击数:44

第一种方法: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);
  • }
  • }
  • }
  • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门