整个过程说明:
1.在页面加载以后,会为这个页面产生一个GUID值,假设为GUID1,对于每一次从服务器传过来的页面来说,这个值是永远不会重复的.
2.当点击按钮或其它,使页面的表单提交给服务器处理以后,会产生一个新的页面,也产生了一个新的GUID值,假设为GUID2
3.当刷新页面的时候,提交表单所在页面的GUID值,仍为GUID1,通过判断所传来页面的GUID值与Session中的GUID值想比较,即可防刷新.
准备:
1.在页面加载以后,会为这个页面产生一个GUID值,假设为GUID1,对于每一次从服务器传过来的页面来说,这个值是永远不会重复的.
2.当点击按钮或其它,使页面的表单提交给服务器处理以后,会产生一个新的页面,也产生了一个新的GUID值,假设为GUID2
3.当刷新页面的时候,提交表单所在页面的GUID值,仍为GUID1,通过判断所传来页面的GUID值与Session中的GUID值想比较,即可防刷新.
准备:
//
用于得到Session里所存的令牌值
public string GetToken()
{
if ( null != Session[ " Token " ])
{
return Session[ " Token " ].ToString();
}
else
{
return string .Empty;
}
}
// 用于产生令牌值,每一次产生的值是永远都不会重复的
private void SetToken()
{
Session.Add( " Token " , UserMd5(Session.SessionID + DateTime.Now.Ticks.ToString()));
}
protected string UserMd5( string str1)
{
return MD5.md5str(str1);
}
第一步:
public string GetToken()
{
if ( null != Session[ " Token " ])
{
return Session[ " Token " ].ToString();
}
else
{
return string .Empty;
}
}
// 用于产生令牌值,每一次产生的值是永远都不会重复的
private void SetToken()
{
Session.Add( " Token " , UserMd5(Session.SessionID + DateTime.Now.Ticks.ToString()));
}
protected string UserMd5( string str1)
{
return MD5.md5str(str1);
}
//
插入一个隐藏的控件,相当于为每一个页面给加了个GUID,对于每一个从服务器传来的页面,这个值是不同的,这个值永远与Session中的值相同.
< input id = " hiddenTest " type = " hidden " value = " <%= GetToken() %> " name = " hiddenTestN " />
第二步:
< input id = " hiddenTest " type = " hidden " value = " <%= GetToken() %> " name = " hiddenTestN " />
//
在page_load事件中,加入以下代码,用于在第一次产生GUID
if ( null == Session[ " Token " ])
{
SetToken();
}
第三步:
if ( null == Session[ " Token " ])
{
SetToken();
}
//
在要防刷新的地方写上:
if ( ! Request.Form.Get( " hiddenTestN " ).Equals(GetToken()))
{
return ;
}
SetToken();
// ***********
if ( ! Request.Form.Get( " hiddenTestN " ).Equals(GetToken()))
{
return ;
}
SetToken();
// ***********