防止刷新页面造成表单重复提交

 

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //第一次载入的时候,生成一个初始的标志
        if (null == Session["Token"])
        {
            SetToken();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Request.Form.Get("hiddenTestN").Equals(GetToken()))
        {
            lblMessage.ForeColor = System.Drawing.Color.Blue;
            lblMessage.Text = "正常提交表单";
            SetToken();//别忘了最后要更新Session中的标志
        }
        else
        {
            lblMessage.ForeColor = System.Drawing.Color.Red;
            lblMessage.Text = "刷新提交表单";
        }
    }

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

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

    //这个函数纯粹是为了让标志稍微短点儿,一堆乱码还特有神秘感,另外,这个UserMd5函数是网上找来的现成儿的
    protected 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;
    }

 

<body>
    <form id="form1" runat="server">
    <div>
             <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="<%= GetToken() %>" name="hiddenTestN"/>
         </div>

    </form>
</body>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值