用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c#代码库

解决刷新网页重复提交表单问题

2014-09-16 作者: 苦瓜爱代码举报

[c#]代码库

前台:
<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" runat="server" type="hidden" value="<%= GetToken() %>" name="hiddenTestN"/>
</div>
    </form>

后台:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Cryptography;
using System.Text;
 protected void Page_Load(object sender, EventArgs e)
        {
            //第一次载入的时候,生成一个初始的标志
            if (null == Session["Token"])
            {
                SetToken();
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //如果是Content而不是From 则Context.Request.Form.Get("hiddenTestN").Equals(GetToken())
            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;
        }

[源代码打包下载]




网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...