欢迎来到天天文库
浏览记录
ID:36566724
大小:52.50 KB
页数:9页
时间:2019-05-12
《防止重复提交表单》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、防止刷新时重复提交表单,以前也研究过,始终没找到好的办法,看了微软Msdn上的解决方案,使用后发现存在较多漏洞,考虑的情况太少,如页面加载后没有提交,始终刷新,在同一浏览器打开多个各选项卡,每个选项卡打开同一页面或不同页面,以下是我的解决方案,Codepublic class RefreshServe : System.Web.UI.Page { private static ILog log = LogManager.GetLogger(typeof(RefreshServe)); private read
2、only string REFRESH_TICKET_NAME = "__RefreshTicketArray"; private readonly string HIDDEN_FIELD_NAME = "__RefreshHiddenField"; private readonly string HIDDEN_PAGE_GUID = "__RefreshPageGuid"; /// /// 为True表示页面刷新,False为正常提交 /// 3、mmary> public bool IsPageRefreshed { get { if (IsPostBack && !CheckRefreshFlag()) { log.Debug("刷新了页面"); return true; } else {4、 log.Debug("正常提交"); return false; } } } /// /// 呈现前更新标识 /// /// protected override void OnPreRender(EventArgs e) { 5、 log.Debug("执行OnPreRender"); base.OnPreRender(e); UpdateRefreshFlag(); } /// /// 更新标识,正常提交都删除该次提交的时间,并生产当前新的时间 /// private void UpdateRefreshFlag() { #region Cookie模式 6、 //注册页面唯一标识并返回 string pageGuid = SetCurPageGuid(); HttpCookie cookie = GetRefreshTicket(); if (cookie.Values.Count > 0) { cookie.Values.Remove(pageGuid); log.Debug("当前清除的cookie变是:"7、 + pageGuid); } string submitTime = DateTime.Now.ToString("hhmmss.fffff"); //当前提交时间保存到隐藏域 ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME, submitTime); log.Debug("即将要新增的时间:submitTime:" + submitTime + " Guid:" + page8、Guid.ToString()); cookie.Values.Add(pageGuid, submitTime); l
3、mmary> public bool IsPageRefreshed { get { if (IsPostBack && !CheckRefreshFlag()) { log.Debug("刷新了页面"); return true; } else {
4、 log.Debug("正常提交"); return false; } } } /// /// 呈现前更新标识 /// /// protected override void OnPreRender(EventArgs e) {
5、 log.Debug("执行OnPreRender"); base.OnPreRender(e); UpdateRefreshFlag(); } /// /// 更新标识,正常提交都删除该次提交的时间,并生产当前新的时间 /// private void UpdateRefreshFlag() { #region Cookie模式
6、 //注册页面唯一标识并返回 string pageGuid = SetCurPageGuid(); HttpCookie cookie = GetRefreshTicket(); if (cookie.Values.Count > 0) { cookie.Values.Remove(pageGuid); log.Debug("当前清除的cookie变是:"
7、 + pageGuid); } string submitTime = DateTime.Now.ToString("hhmmss.fffff"); //当前提交时间保存到隐藏域 ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME, submitTime); log.Debug("即将要新增的时间:submitTime:" + submitTime + " Guid:" + page
8、Guid.ToString()); cookie.Values.Add(pageGuid, submitTime); l
此文档下载收益归作者所有