Rumah  >  Artikel  >  pembangunan bahagian belakang  >  .NET防止刷新重复提交

.NET防止刷新重复提交

巴扎黑
巴扎黑asal
2016-12-19 16:43:061767semak imbas

代码 
公共类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; 
                } 
            } 
        } 

        /// <摘要> 
        ///呈现前更新标识 
        ///  
        /// 的 
        保护覆盖无效的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                 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                     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) 

   数据库操作 
}

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn