/*-----------------------------------------
*开 发 者: 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;
}
}
*开 发 者: 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;
}
}