[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;
}
[源代码打包下载]