zoukankan      html  css  js  c++  java
  • 短时间内客户端发起多次请求或提交多次数据问题解析

    短时间内或相同时间内客户端发起多次请求或提交多次数据(form表单)

    客户端协议层面:

    1.客户触发,前端未验证,多次点击触发多次提交(可能性较大)

    2.客户端软件、浏览器重发机制

    3.弱网,网络很差的情况下,建立了tcp连接后,已经发出请求。网络闪断,重连。浏览器会重新发出请求。导致发送两次请求。(可能性较大)

    数据库层面:

    数据插入多条,数据库必然执行多次insert语句。

    在php向Mysql中间件进行通信时出现问题,即发起多次请求(可能性特别低)。

    内网通信时,应用程序和mysql连接断开机率特别特别低。

    使用远程数据库时,应用程序和mysql连接断开机率也很低。

    PS:浏览器发送两次请求:

    1.客户端返回302

    客户出发请求,客户端发起请求到服务器,服务器返回302和body(url),客户端此时会再次发起请求跳转到重定向的url

    2.websocket 101

    具体问题:表单提交时,插入多条重复数据(无唯一键

    前期表结构非常烂,a,b字段作为查询条件,并未设置联合唯一键。

    项目已经跑了很长时间了,已经重复插入多条数据。

    无法(不想)清理重复数据,导致无法设置联合唯一键了。

    我不想(不敢)动数据库(legend code)。

    总结起来就是:无法清理之前数据、导致无法设置唯一键。

    解决办法:

    1.JS,阻止用户提交多次

    2.后端,新增唯一键

    偏方:

      1. 增加shop_id_copy字段,值与id(primary)一致

      2. 设置shop_id_copy与userName为联合唯一键

      3.shop_id_copy在业务逻辑中与shop_id值一致(这个纯属野路子,增加了数据库的开销)

  • 相关阅读:
    Ubuntu在下面LAMP(Linux+Apache+MySQL+PHP) 开发环境的搭建
    直接插入排序、折半插入排序、Shell排序、冒泡排序,选择排序
    java插入字符串
    bash,bg,bind,break,builtin,caller,compgen, complete,compopt,continue,declare,dirs,disown,enable,eval,exec,expo
    socket用法
    org.jsoup.select.Selector
    达达技术
    CentOS 6.4 文件夹打开方式
    shell加法
    shell统计
  • 原文地址:https://www.cnblogs.com/linglingyang/p/8472077.html
Copyright © 2011-2022 走看看