zoukankan      html  css  js  c++  java
  • 表单重复提交笔记

     同一个表单中的内容多次提交到服务器中。
     第一种情况:
        提交完表单以后,不做其他操作,直接刷新页面,表单会提交多次。
        - 这种情况产生的根本原因是,Servlet处理完请求以后,直接转发到目标页面。
        - 这样整一个业务,只发送了一次请求,那么当你在浏览器中点击刷新按钮或者狂按f5会一直都会刷新之前的请求

    解决方案:
         使用重定向跳转到目标页面 
    第二种情况:
        在提交表单时,如果网速较差,可能会导致点击提交按钮多次,这种情况也会导致表单重复提交。
        - 产生的原因:是因为咱们的提交按钮可以点击多次。

     解决方案: 
         使提交按钮只能点击一次。这得通过js来完成。
        window.onload = function(){
         //获取按钮的对象
         var btn = document.getElementById("sub_btn");
         //为按钮绑定单击响应函数
         btn.onclick = function(){     
          //点击以后使按钮不可用
          this.disabled=true;
          //当将提交按钮设置为不可用时,会自动取消它的默认行为
          //手动提交表单
          this.parentNode.submit();  
         };    
        };
    第三种情况:
        表单提交成功以后,直接点击浏览器上回退按钮,不刷新页面,然后点击提交按钮再次提交表单。
    产生的原因:
         因为服务器在处理请求时,不会检查是否为重复提交的请求。
    解决方案:
         使用一个token的机制。
    token就是令牌的意思。
         - 服务器在处理请求之前先来检查浏览器的token。
         - token由服务器来创建,并交给浏览器,浏览器在向服务器发送请求时需要带着这个token
         - 服务器处理请求前检查token是否正确,如果正确,则正常处理,否则返回一个错误页面
         - 服务器所创建的token只能使用一次。
         - token一般使用一个唯一的标识。
        
    表单重复提交的危害:
        - 向数据库中插入大量的重复且没有意义的数据,占用服务器的资源。
        - 处理请求服务器并没有检查请求是否为重复的请求,导致恶意的攻击。

    人生如水,不争高山,自然愈下,三年又三年。——struggle!
  • 相关阅读:
    第一节:Node.js简介
    Socket实现java服务端与AndroidApp端数据交互
    zz Android Studio --“Cannot resolve symbol” 解决办法
    git 阿里云代码托管
    zzvisual studio系列(vs)启动调试网站使用ip+端口局域网访问
    阿里云的域名给七牛云的配置CDN和ssl
    win10 visual studio IIS Express 局域网调试,默认只能localhost
    window2012 iis8.0 配置https 默认居然是TLS1.1
    andriod 连接wcf ,HttpURLConnection FileNotFoundException
    zzWCF实现RESTFul Web Service
  • 原文地址:https://www.cnblogs.com/PersistWp/p/7375575.html
Copyright © 2011-2022 走看看