ASP.net关于防止刷新重复提交数据

因为有些数据是允许重复的,但用户在提交表单后按刷新就会重复提交数据,即所谓的“刷新重复提交”的问题。禁止“刷新”是不现实的,禁的了键盘鼠标禁不了浏览器上的按钮;保存后跳转到其他页面,用户可以通过后退和再刷新回到刚才的页面。我想理想的情况是不能通过后退回到提交的页面。

我的方法不是很复杂,2步:

1、先在Page_Load里加入

  1.     // 使后退时页面过期
  2.     Response.Expires = 0;
  3.     Response.CacheControl = "no-cache";
  4.     if (!IsPostBack)
  5.     {
  6.         ViewState["s"] = Guid.NewGuid().ToString("N"); // 每打开一个页面一个GUID,防止session冲突
  7.         Session[ViewState["s"].ToString()] = "zorroncn"// session值自定义
  8.     }
  9.     else // 刷新或PostBack时
  10.     {
  11.         if (Session[ViewState["s"].ToString()] == null)
  12.             Response.Redirect("~/default.aspx"); // 想跳转的页面
  13.     }

2、然后在保存按钮的_Click里加入

  1. // if保存成功时
  2.     Session.Remove(ViewState["s"].ToString()); // 保存成功去掉此session
  3.     Response.Redirect("~/default.aspx"); // 想跳转的页面
  4. }

跳转后如再后退,则显示页面已过期;再点刷新时因此session已不存在,则会跳转到其他页面。旧页面都无法浏览到,就更不怕重复提交数据了。

此方法的问题是用到了session,当不点保存返回时,此session没有Remove,可能比较浪费资源。如还有其他bug,请指教。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值