zoukankan      html  css  js  c++  java
  • 防止页面重复提交

    /*-----------------------------------------
     *开 发 者:  awp
     *创建日期:   2009-6-25 星期4
     *功能描述:   防止页面重复提交
     *
     * 用法服务器控件的
     *  <form id="form1" runat="server">
        <input type="text" id="tbxName" runat="server" />
        <input type="text" id="tbxPass" value="" runat="server" />
        <asp:Button ID="btnSubmit" runat="server" OnClick="Button1_Click" Text="Button" />
        <asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
        <input id="hiddenTest" type="hidden" value="<%=AvoidRefurbish.GetToken() %>" name="hiddenTestN" />
        </form>
     * 后台代码
     * 
     *  protected void Page_Load(object sender, EventArgs e)
        {
            AvoidRefurbish.FirstRefurbish();
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (AvoidRefurbish.IfOnRefurbish())
            {
                Response.Write("true");
            }
            else
            {
                Response.Write("false");
            }
        }
     * 
     * 
     * 
     * html控件
     * 
     *   <form id="form1" action="?cmd=add" method="post">
        <input type="text" id="tbxName" runat="server" />
        <input type="text" id="tbxPass" value="" runat="server" />
        <input id="Submit1" type="submit" value="submit" />
        <input id="hiddenTest" type="hidden" value="<%=AvoidRefurbish.GetToken() %>" name="hiddenTestN" />
        </form>
     * 
     *  protected void Page_Load(object sender, EventArgs e)
        {
         AvoidRefurbish.FirstRefurbish();

            if (Request.QueryString["cmd"] != null)
            {
                if (Request.QueryString["cmd"].ToString() == "add")
                {

                    if (AvoidRefurbish.IfOnRefurbish())
                    {
                        Response.Write("true");
                    }
                    else
                    {
                        Response.Write("false");
                    }
                }
            }
        }
     * 
     * 
     * 
     *-----------------------------------------
    */
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Security.Cryptography;
    using System.Text;

    /// <summary>
    ///AvoidRefurbish 的摘要说明
    /// </summary>
    public class AvoidRefurbish
    {
        
    /// <summary>
        
    /// 判断是否正常提交
        
    /// </summary>
        
    /// <returns></returns>
        public static bool IfOnRefurbish()
        {
            
    if (HttpContext.Current.Request.Form.Get("hiddenTestN").Equals(GetToken()))
            {
                SetToken();
                
    return true;
            }
            
    return false;
        }

        
    /// <summary>
        
    /// 第一次进入页面
        
    /// </summary>
        public static void FirstRefurbish()
        {
            
    //第一次载入的时候,生成一个初始的标志 
            if (null == HttpContext.Current.Session["Token"])
            {
                SetToken();
            }
        }

        
    /// <summary>
        
    /// 获得当前Session里保存的标志 
        
    /// </summary>
        
    /// <returns></returns>
        public static string GetToken()
        {
            
    if (null != HttpContext.Current.Session["Token"])
            {
                
    return HttpContext.Current.Session["Token"].ToString();
            }
            
    else
            {
                
    return string.Empty;
            }
        }


        
    //生成标志,并保存到Session 
        private static void SetToken()
        {
            HttpContext.Current.Session.Add(
    "Token", UserMd5(HttpContext.Current.Session.SessionID + DateTime.Now.Ticks.ToString()));
        }


        
    //这个函数纯粹是为了让标志稍微短点儿,一堆乱码还特有神秘感,另外,这个UserMd5函数是网上找来的现成儿的 
        private static string UserMd5(string str1)
        {
            
    string cl1 = str1;
            
    string pwd = "";
            MD5 md5 
    = MD5.Create();
            
    // 加密后是一个字节类型的数组 
            byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
            
    // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 
            for (int i = 0; i < s.Length; i++)
            {
                
    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                pwd = pwd + s[i].ToString("X");
            }
            
    return pwd;
        }
    }
  • 相关阅读:
    Android 工程师进阶 34 讲
    300分钟搞定数据结构与算法
    即学即用的Spark实战44讲
    42讲轻松通关 Flink
    Webpack原理与实践
    大数据运维实战
    ZooKeeper源码分析与实战
    前端高手进阶
    重学数据结构与算法
    ElementUI中el-upload怎样上传文件并且传递额外参数给Springboot后台进行接收
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1519839.html
Copyright © 2011-2022 走看看