[C#] 解决刷新网页重复提交表单问题 →→→→→进入此内容的聊天室

来自 , 2019-12-18, 写在 C#, 查看 105 次.
URL http://www.code666.cn/view/50abc3e7
  1. 前台:
  2. <form id="form1" runat="server">
  3.     <div>
  4. <input type="text" id="tbxName" runat="server"/>
  5. <input type="text" id="tbxPass" value="" runat="server"/>
  6. <asp:Button ID="btnSubmit" runat="server" OnClick="Button1_Click" Text="Button" />
  7. <asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
  8. <input id="hiddenTest" runat="server" type="hidden" value="<%= GetToken() %>" name="hiddenTestN"/>
  9. </div>
  10.     </form>
  11.  
  12. 后台:
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using System.Web;
  17. using System.Web.UI;
  18. using System.Web.UI.WebControls;
  19. using System.Security.Cryptography;
  20. using System.Text;
  21.  protected void Page_Load(object sender, EventArgs e)
  22.         {
  23.             //第一次载入的时候,生成一个初始的标志
  24.             if (null == Session["Token"])
  25.             {
  26.                 SetToken();
  27.             }
  28.         }
  29.  
  30.         protected void Button1_Click(object sender, EventArgs e)
  31.         {
  32.             //如果是Content而不是From 则Context.Request.Form.Get("hiddenTestN").Equals(GetToken())
  33.             if (Request.Form.Get("hiddenTestN").Equals(GetToken()))  
  34.             {
  35.                 lblMessage.ForeColor = System.Drawing.Color.Blue;
  36.                 lblMessage.Text = "正常提交表单";
  37.                 SetToken();//别忘了最后要更新Session中的标志
  38.             }
  39.             else
  40.             {
  41.                 lblMessage.ForeColor = System.Drawing.Color.Red;
  42.                 lblMessage.Text = "刷新提交表单";
  43.             }
  44.         }
  45.         //获得当前Session里保存的标志
  46.         public string GetToken()
  47.         {
  48.             if (null != Session["Token"])
  49.             {
  50.                 return Session["Token"].ToString();
  51.             }
  52.             else
  53.             {
  54.                 return string.Empty;
  55.             }
  56.         }
  57.         //生成标志,并保存到Session
  58.         private void SetToken()
  59.         {
  60.             Session.Add("Token", UserMd5(Session.SessionID + DateTime.Now.Ticks.ToString()));
  61.         }
  62.         //这个函数纯粹是为了让标志稍微短点儿,一堆乱码还特有神秘感,另外,这个UserMd5函数是网上找来的现成儿的
  63.         protected string UserMd5(string str1)
  64.         {
  65.             string cl1 = str1;
  66.             string pwd = "";
  67.             MD5 md5 = MD5.Create();
  68.             // 加密后是一个字节类型的数组
  69.             byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
  70.             // 通过使用循环,将字节类型的数组转换为字符串,此字符串 是常规字符格式化所得
  71.             for (int i = 0; i < s.Length; i++)
  72.             {
  73.                 // 将得到的字符串使用十六进制类型格式。格式后的字符是 小写的字母,如果使用大写(X)则格式后的字符是大写字符
  74.                 pwd = pwd + s[i].ToString("X");
  75.             }
  76.             return pwd;
  77.         }

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

这儿你可以回复上面这条便签

captcha