<script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (HiddenField1.Value != "1")
        {
            SqlDataSource1.InsertParameters["title"].DefaultValue = TextBox1.Text;
            SqlDataSource1.InsertParameters["content"].DefaultValue = TextBox2.Text;
            SqlDataSource1.InsertParameters["atime"].DefaultValue = DateTime.Now.ToString();
            SqlDataSource1.Insert();
            HiddenField1.Value = "1";
        }
        else {            Label3.Text = "请勿重复提交数据!";
        
        }
      
    }
</script>重复提交表单的方法有好多,重复click,刷新,后退等都可以重复提交,像上面的这种做法,请问弊端在哪里?谢谢肯定没有完美的方法,不过如何没有打的问题 ,这个用起来还是蛮省事的

解决方案 »

  1.   

    不是漏洞,是根本没有用,必须使用服务端状态来控制如session
      

  2.   

    按下F5,每次提交的数据都是一样的,Hidden中的值也不会变。
      

  3.   

    用cookie存入数据判断是否提交过应该可行吧。
      

  4.   

    这个问题一句话说不完,主要看你干什么用一般情况用JS 判断下就好了 只是防止重复点击
    其他形式的话 就用SQL 直接查询 判断了
      

  5.   

    <script runat="server">
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (Session["yet"].ToString() != "1")
            {
                SqlDataSource1.InsertParameters["title"].DefaultValue = TextBox1.Text;
                SqlDataSource1.InsertParameters["content"].DefaultValue = TextBox2.Text;
                SqlDataSource1.InsertParameters["atime"].DefaultValue = DateTime.Now.ToString();
                SqlDataSource1.Insert();
              
                Session["yet"] = "1";
            }
            else {            Label3.Text = "请勿重复提交数据!";
            
            }
          
        }
    </script>这样行吗?但是我的写法不正确
      

  6.   

    楼主可以百度一下 ClickOnceButton  这个小控件已经有人把button控件进行重新写了  加入了防重复提交是一个dll文件  引入项目   用他替代目前的button控件进行提交
      

  7.   

    参考
    http://blog.csdn.net/zhanglei5415/archive/2010/12/07/6060906.aspx
      

  8.   

    把按钮点完后设置为disable,防君子不防小人,呵呵
      

  9.   

    要看你的需求是什么针对外部用户的话就要做的严格点,session存值、验证码之类的
    内部用户只需要防止刷新即可
      

  10.   

    无论怎么弄,服务器BUTTON控件点击都会提交。
    你可以用JS在页面前端判断,就不会提交了
      

  11.   

    太乱了!用session存储状态值,在后台当要执行重复操作的时候引用进行逻辑判断