首頁  >  文章  >  後端開發  >  .NET防止刷新重複提交

.NET防止刷新重複提交

巴扎黑
巴扎黑原創
2016-12-19 16:43:061766瀏覽

程式碼 
公用類別RefreshServe:System.Web.UI.Page 
    { 
        私有靜態中ILog FRESH_TICKET_NAME =「__RefreshTicketArray」; 
        私人隻讀取字串HIDDEN_FIELD_NAME =「__RefreshHiddenField」; 
        私人唯讀字串HIDDEN_PAGE_GUID =「__RefreshPageGuid」; 為真表示頁面刷新,假為正常提交 
        /// 摘要> 
        公共BOOL IsPageRefreshed 
        { 
            獲得 
            { 
                如果(的IsPostBack &&!CheckRefreshFlag()) 
                { 
                    log.Debug(“刷新了頁面“); 
                    返回true; 
                } 
                其他 
                { 
                    log.Debug (「正常提交」); 
                    返回false; 
     } 
        } 

        ///  
       / param>的 
        保護覆蓋無效的OnPreRender(EventArgs的送) 
        {             base.OnPreRender(E); 
            UpdateRefreshFlag(); 🠎
        ///  
        ///更新標識,並在正常提交中刪除該次提交的時間,並生產當前新的時間 
  ) 
        { 

           地的Cookie模式 

            //與 
           HttpCookie餅乾= GetRefreshTicket(); 
           
                         cookie.Values .Remove(pageGuid); 
log.Debug(「目前清除的cookie的變體是:」+ pageGuid); 
            } 

                //目前提交時間保存至隱藏域 
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME,submitTime); 


           ,       cookie.Values.Add( pageGuid,submitTime); 

            log.Debug(「UpdateRefreshFlag中目前的Cookie中存在的記錄數為:」+ C. .Count;我++) 
               

            #endregion 




        ///  
        ///驗證是否有刷新 
            私人布林CheckRefreshFlag() 
        { 
            的HttpCookie餅乾= GetRefreshTicket      的HttpCookie餅乾= GetRefreshTicket (); 
            字串pageGuid = GetCurPageGuid(); 
          
                布林標記; 
               與(pookie.Value [pageGuid]! = NULL) 
                    標誌= cookie.Values [pageGuid] .IndexOf(GetCurSubmit1())> -1;
                            log.Debug( 「提交時間存在,可提交」); 
                其他 
                      回傳標誌; 
            } 
              ///  
        ///有已儲存的提交時間,沒有新建,有回 
        /// 摘要> 
        /// 工作>    {            
#地區的Cookie模式,回值為曲奇 

            的HttpCookie cookie的; 
                { 
                餅乾=新的HttpCookie(REFRESH_TICKET_ ); 
                         { 
                餅乾= Request.Cookies時[REFRESH_TICKET_NAME]   餅乾= Request.Cookies,    「讀取已存在的餅乾,曲奇當前存在的記錄數為:”+ cookie.Values.Count +“具體有以下幾條:”); 

                       log.Info (「餅乾[」+ cookie.Values.GetKey(I)+「]:」+ cookie.Values [I]); 
            }       #endregion 
        } 


        ///  
///取得目前提交時間 
        /// 摘要> 
        /// 回報> 
               字串submitTime = Request.Params [HIDDEN_FIELD_NAME] ==空值? 「」:Request.Params [HIDDEN_FIELD_NAME]的ToString(); 
            log.Debug(「執行GetCurSubmitTime:
        } 


        ///  
        ///設定頁面唯一標識,透過的Guid標識來區分每個頁面自己的提交時間
        /// 摘要> 
        私人字串SetCurPageGu   字串GUID; 
            若(的IsPostBack!) 
            { 
如果(Request.Params [HIDDEN_PAGE_GUID] == NULL) 
                { 
                    GUID = System.Guid.NewGuid()的ToString()。 
                               否則 
                  地} 
            否則 
            { 
            
            } 

             回傳GUID; 
        } 



        ///  
         ///     
        /// 摘要> 
        /// 0> 
               字串pageGuid = Request.Params [HIDDEN_PAGE_GUID] ==空值? 「無」:Request.Params [HIDDEN_PAGE_GUID]的ToString(); 
            log.Debug(「執行GetCurPageGuid( 
        } 





999999999999999999999999999999999999999999999999刷新判斷功能時新頁面只需繼承該類別就可,通過引用屬性IsPageRefreshed識別“為真表示刷新,假則是正常提交​​”,將數據庫的操作寫在 
如果(!IsPageRefreshed) 

   數據庫操作 
}

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn