zoukankan      html  css  js  c++  java
  • [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);
                }
            }
        }
    }
  • 相关阅读:
    Java8时间处理
    yii2.0上传图片
    将字符串不足长度的填充到指定长度
    通过PHPExcel将Excel表文件中数据导入数据库
    css万能清除原理
    浮动+清除浮动
    DIV滚动条设置添加 CSS滚动条显示与滚动条隐藏
    地图上显示点在点上标注当前点的id
    百度地图点击地址后显示图标,保存到数据库之后,页面显示的是保存的坐标图标
    百度地图API
  • 原文地址:https://www.cnblogs.com/xiongze520/p/6283135.html
Copyright © 2011-2022 走看看