一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

防止用户重复提交数据方法总结

时间:2012-09-28 编辑:简简单单 来源:一聚教程网

php cookie处理方法

如果数据通过了上边的两次验证,说明数据是合法有效的数据。这时候我们把提交的数据串接为一个字符串,并用MD5加密后得到一个MD5的值,接着我们把这个值通过Cookie放进客户端,当用户下一次提交表单的时候我们就重新操作这一步,并且读出Cookie中的MD5值,进行比较,如果相同就可断定用户提交两次提交的表单是相同的,否则替换这个Cookie!

 代码如下 复制代码

$value = $_COOKIE["value"]; //读取上一次设置的Cookie值
if(count($_POST)) {
$long = "";
while(list($key,$value)=each($_POST))$long.=$value;
$hash = md5($long);
setcookie("value",$hash,time()+60*60); //重新设置cookie
}
if($value!=$hash) {
// 如果两次的MD5值不一样就对数据进行进一步操作
} else {
//如果两次MD5的值相同,告知用户提交失败 ,为重复提交表单
}
?>

js解决方法

1.提交时多次刷新,导致服务器上的脚本多次接受数据

方案

第一步:前台表单用javascript函数触发表单的submit.哪些对输入内容不作校验直接insert into的多可怕呀

示例:

 代码如下 复制代码






利用浏览器的缓存回退接着提交

第一步:可以在处理后用强制方法把上一步地址记录清空.像javascript中 location.replace或像PHP中的Location,即使这步用不上也无所谓.我们只要清空浏览器保存的值就可以
第二步:在表单页面加入下面的JS函数

 代码如下 复制代码


$(window).load(function () {
 $('#signupform').find('input,textarea').not(':submit,:hidden,:rest').val('');
});

也可以用javascript DOM 的Form reset().如下示例

 代码如下 复制代码

$('#signupform').each (function(){
  this.reset();
})


asp.net解决方法

解决方法是存储Session的ID和当提交时ViewState中存储的SessionID相比较来防止用户刷新屏屏幕。前提你的程序中允许了自动回发,如果不是的话,就得在hidden field存储这个变量了。下面给出一个典型的例子。在Page_Load事件中你存储了第一次提交时的SessionID和一个时间戳。

 代码如下 复制代码

protected System.Web.UI.WebControls.Button SubmitButton;

protected System.Web.UI.WebControls.Label RefreshID;     

private void Page_Load(object sender, System.EventArgs e)

{
     if (RefreshID.Text.Length == 0)
    {
            RefreshID.Text = Session.SessionID+DateTime.Now.Ticks.ToString();
      }
}
 

private void Button1_Click(object sender, System.EventArgs e)

{
      string sesToken = (string) Session[FrameworkConst.SYNC_CONTROL_KEYWORD];      string pageToken = RefreshID.Text;
      if (sesToken != null && sesToken != pageToken)
      {
            Response.Write("The Refresh was performed after submit.");
     }
      else
      {
            // do your processing here to avoid Refresh trap
            Response.Write("The processing is done here. Disabling submit
button so that user can not perform multiple submit.");
            Response.Write("But still user can peform Refresh on page.");
      }

      Session[FrameworkConst.SYNC_CONTROL_KEYWORD] =       Session.SessionID+DateTime.Now.Ticks.ToString();
      RefreshID.Text = sesToken;        
      SubmitButton.Enabled = false;

}

jsp重复提交问题

看了网上的,有几种方法:
1 在你的表单页里HEAD区加入这段代码:

 代码如下 复制代码


2 生成一个令牌保存在用户session中,在form中加一个hidden域,显示该令
牌的值,form提交后重新生成一个新的令牌,将用户提交的令牌和session
中的令牌比较,如相同则是重复提交

3 在你的服务器端控件的代码中使用Response.Redirect("selfPage")语句。但是大多的数都不使用这种方法。
方法还有很多。。。

4

 代码如下 复制代码

5 在JSP页面的FORM表单中添加一个hidden域  

 代码如下 复制代码
>  

   
在你的serverlet(Java代码)中添加如下语句  

 代码如下 复制代码
String   url=request.getParameter("url");  
response.sendRedirect(url);  

热门栏目