.NET防止重新整理重複提交
來源:互聯網
上載者:User
代碼
公用類RefreshServe:System.Web.UI.Page
{
私人靜態ILog日誌= LogManager.GetLogger(typeof運算(RefreshServe)) ;
私人唯讀字串REFRESH_TICKET_NAME =“__RefreshTicketArray”;
私人唯讀字串HIDDEN_FIELD_NAME =“__RefreshHiddenField”;
私人唯讀字串HIDDEN_PAGE_GUID =“__RefreshPageGuid”;
/// <摘要>
///為真表示頁面重新整理,假為正常提交
/// </摘要>
公用BOOL IsPageRefreshed
{
獲得
{
如果(的IsPostBack &&!CheckRefreshFlag())
{
log.Debug(“重新整理了頁面“);
返回true;
}
其他
{
log.Debug(“正常提交”);
返回false;
}
}
}
/// <摘要>
///呈現前更新標識
/// </摘要>
/// <param name =“E”> </ param>的
保護覆蓋無效的OnPreRender(EventArgs的發送)
{
log.Debug (“執行的OnPreRender”);
base.OnPreRender(E);
UpdateRefreshFlag();
}
/// <摘要>
///更新標識,正常提交都刪除該次提交的時間,並生產當前新的時間
/// </摘要>
私人無效UpdateRefreshFlag()
{
#地區的Cookie模式
//註冊頁面唯一標識並返回
字串pageGuid = SetCurPageGuid();
的HttpCookie餅乾= GetRefreshTicket();
如果(cookie.Values.Count> 0)
{
cookie.Values.Remove(pageGuid);
log.Debug(“當前清除的cookie的變是:”+ pageGuid);
}
字串submitTime = DateTime.Now.ToString(“hhmmss.fffff”);
//當前提交時間儲存到隱藏欄位
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME,submitTime);
log.Debug(“即將要新增的時間:submitTime:”+ submitTime +“的Guid:”+ pageGuid.ToString());
cookie.Values.Add(pageGuid,submitTime);
log.Debug(“UpdateRefreshFlag中當前的Cookie中存在的記錄數為:”+ cookie.Values.Count);
對(INT I = 0; I <cookie.Values.Count;我++)
log.Info(“餅乾[”+ cookie.Values.GetKey(I)+“]:”+ cookie.Values [I]);
Response.AppendCookie(餅乾);
#endregion
}
/// <摘要>
///驗證是否重新整理
/// </摘要>
/// <返回> </回報>
私人布爾CheckRefreshFlag()
{
的HttpCookie餅乾= GetRefreshTicket();
字串pageGuid = GetCurPageGuid();
如果(cookie.Values.Count> 0)
{
布爾標誌;
如果(cookie.Values [pageGuid]!= NULL)
標誌= cookie.Values [pageGuid] .IndexOf(GetCurSubmitTime())> -1;
其他
標誌= TRUE; //防止出現異常,總是可以提交
如果(標誌)
log.Debug(“提交時間存在,可以提交”);
其他
log.Debug(“無效的提交時間”);
返回標誌;
}
返回true;
}
/// <摘要>
///得到已儲存的提交時間,沒有建立,有返回
/// </摘要>
/// <返回> </回報>
私人的HttpCookie GetRefreshTicket()
{
#地區的Cookie模式,傳回值為曲奇
的HttpCookie cookie的;
如果(Request.Cookies時[REFRESH_TICKET_NAME] == NULL)
{
餅乾=新的HttpCookie(REFRESH_TICKET_NAME);
Response.AppendCookie(餅乾);
log.Debug(“曲奇不存在,初始化”);
}
否則
{
餅乾= Request.Cookies時[REFRESH_TICKET_NAME]
log.Debug(“讀取已存在的餅乾,曲奇當前中存在的記錄數為:”+ cookie.Values.Count +“具體有如下幾條:”);
對(INT I = 0; I <cookie.Values.Count;我++)
log.Info(“餅乾[”+ cookie.Values.GetKey(I)+“]:”+ cookie.Values [I]);
}
返回的cookie;
#endregion
}
/// <摘要>
///擷取當前提交時間
/// </摘要>
/// <返回> </回報>
私人字串GetCurSubmitTime()
{
字串submitTime = Request.Params [HIDDEN_FIELD_NAME] ==空值 ?“”:Request.Params [HIDDEN_FIELD_NAME]的ToString();
log.Debug(“執行GetCurSubmitTime:submitTime為:”+ submitTime);
返回submitTime;
}
/// <摘要>
///設定頁面唯一標識,通過的Guid標識來區分每個頁面自己的提交 時間
/// </摘要>
私人字串SetCurPageGuid()
{
字串GUID;
如果(的IsPostBack!)
{
如果(Request.Params [HIDDEN_PAGE_GUID] == NULL)
{
GUID = System.Guid.NewGuid()的ToString()。
log.Debug(“SetCurPageGuid註冊了一個新的標識:”+ GUID);
}
否則
GUID = GetCurPageGuid();
}
否則
{
GUID = GetCurPageGuid();
}
ClientScript.RegisterHiddenField(HIDDEN_PAGE_GUID,GUID)
返回GUID;
}
/// <摘要>
///得到當前頁面的唯一標識
/// </摘要>
/// <返回> </回報>
私人字串GetCurPageGuid()
{
字串pageGuid = Request.Params [HIDDEN_PAGE_GUID] ==空值 ?“無”:Request.Params [HIDDEN_PAGE_GUID]的ToString();
log.Debug(“執行GetCurPageGuid()後Page_GUID為:”+ pageGuid);
返回pageGuid;
}
}
999999999999999999999999999999999999999999999999
需要重新整理判斷功能時新頁面只需繼承該類就可,通過引用屬性IsPageRefreshed識別“為真表示重新整理,假則是正常提交”,將資料庫的操作寫在
如果(!IsPageRefreshed)
{
資料庫操作
}