博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
短时间内客户端发起多次请求或提交多次数据问题解析
阅读量:4695 次
发布时间:2019-06-09

本文共 770 字,大约阅读时间需要 2 分钟。

短时间内或相同时间内客户端发起多次请求或提交多次数据(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值一致(这个纯属野路子,增加了数据库的开销)

 

 

 

转载于:https://www.cnblogs.com/linglingyang/p/8472077.html

你可能感兴趣的文章
Day18
查看>>
Web Service数据源
查看>>
php.ini详解(转)
查看>>
[转]基于Python的接口测试框架
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
PeekMessage、GetMessage的区别
查看>>
磁盘使用率达到100%
查看>>
linux跳过root密码登陆
查看>>
201571030130/201571030124《小学四则运算练习软件需求说明》结对项目报告
查看>>
mini2440 U-boot 编译
查看>>
在UTF-8中,一个汉字为什么需要三个字节?
查看>>
浅谈 WPF控件
查看>>
学习ThreadLocal
查看>>
在 Visual Studio 调试器中指定符号 (.pdb) 和源文件
查看>>
直接量
查看>>
leetcode 115. 不同的子序列(Distinct Subsequences)
查看>>
三元表达式
查看>>
Go初接触之libjpeg-turbo
查看>>
python--生成器协程运算
查看>>
INFT 3030 Concurrent Programming
查看>>