怎样防止页面被重覆提交

     今天在和同事调试bug时,发现页面以post方式提交的数据,在刷新浏览器的时会重复提交。处理完这个问题后我写下了这篇文章。

     我现在知道可以处理重复提交的方式有两种:

     (1)使用Token值。类似于验证码的处理方式。用户在每次提交时由于Token值不同,就不会出现这个问题了:

public class TokenProcesser {

 /**
  * 在session中保存token值
  * */
 public synchronized static String saveTokenToSession(HttpSession session){
  if(session ==null){
   return null;
  }
  StringBuffer token=new StringBuffer();
  for(int i=0;i< 10; i++){
   Random ram=new Random();
   token.append(String.valueOf(ram.nextInt(100)));
  }
  session.setAttribute("tokenvalue", token.toString());
  return token.toString();
 }
 
 public static String getTokenStringInSession(HttpSession session){
  if(session ==null){
   return null;
  }
  return (String)session.getAttribute("tokenvalue");
 }
 
 /**
  * 在session中删除tokenz值
  *
  * */
 public synchronized static void removeTokenInSession(HttpSession session){
  if(session ==null){
   return;
  }
  session.removeAttribute("tokenvalue");
 }
 
 
}

 

在方法中调用时,在渲染这个页面的方法时,生成Token值并保存到session中,而在处理Form提交的Action类里,在session获得此Token值。如果相等则程序继续,并调用上面的方法生成新的Token值保存到session中,否则结束程序,返回以前的页面。

(2)页面重定向

 在Action中处理完post 表单提交数据后,用Get的方式重定向到原来的页面。这个要根据不同的MVC框架来决定具体的用法。我使用的是sofaMVC。

在sofa中,很简单:直接返回视图名称。例如:return “redirect:index.htm”

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值