如何防止在网络不好的情况下,因用户心急而重复点击表单提交按钮导致的重复数据? - V2EX
首页
注册
登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请
登录
V2EX
问与答
如何防止在网络不好的情况下,因用户心急而重复点击表单提交按钮导致的重复数据?
yangxg
2016-12-19 11:06:11 +08:00
3846 次点击
这是一个创建于 3221 天前的主题,其中的信息可能已经有所发展或是发生改变。
比如论坛发帖,用户写好帖子后,点击提交按钮,由于网络比较慢,页面迟迟未跳转。用户以为提交没有成功,可能尝试多次点击提交。这时相当于发送了多个相同的表单提交请求到后台的视图函数。后台视图会一个个处理这些请求,如果没有做防护措施,用户提交的数据就会存入数据库 N 次,请问防护这种情况的最佳实践是什么?
我目前感觉比较可行的方案是:
1. 前端使用 js 检测用户的提交,当用户点击提交按钮后,提交按钮会被禁用,用户无法再次点击。但是这只能防止普通用户的误操作,如果是恶意用户故意灌水,他可以禁用掉浏览器 js 。所以第二步做后台防护。
2.在表单中会有一个隐藏值,当用户第一次提交后,这个隐藏值将存入用户的 session ,处理数据时会检查用户的 session 值,如果这个 session 值已经存在,表明表单数据已经处理过,那么就返回重复提交的错误。
请问这种处理方式是否是好的实践? 是否存在缺陷?
提交
用户
Session
按钮
2 条回复
1
SpicyCat
2016-12-19 13:47:34 +08:00
干脆再比较下帖子内容呗。内容相同的贴子在 XX 时间内不能发出。有的论坛更狠,内容相似都不行。
2
yangxg
OP
2016-12-21 22:27:02 +08:00 via iPhone
@
SpicyCat
这些后台验证方案我都感觉有问题。假设服务器并发执行这些请求,判断用户的 session 和帖子是否重复都没法同步,比如第一次处理数据还没有存入数据库,也还没有设置好 session ,那么第二次处理就无法获取这些指标,依然会绕过验证。不知道 V2EX 是如何防护的?
关于
帮助文档
自助推广系统
博客
API
FAQ
Solana
918 人在线
最高记录 6679
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 34ms
UTC 22:00
PVG 06:00
LAX 15:00
JFK 18:00
Do have faith in what you're doing.
ubao
snddm
index
pchome
yahoo
rakuten
mypaper
meadowduck
bidyahoo
youbao
zxmzxm
asda
bnvcg
cvbfg
dfscv
mmhjk
xxddc
yybgb
zznbn
ccubao
uaitu
acv
GXCV
ET
GDG
YH
FG
BCVB
FJFH
CBRE
CBC
GDG
ET54
WRWR
RWER
WREW
WRWER
RWER
SDG
EW
SF
DSFSF
fbbs
ubao
fhd
dfg
ewr
dg
df
ewwr
ewwr
et
ruyut
utut
dfg
fgd
gdfgt
etg
dfgt
dfgd
ert4
gd
fgg
wr
235
wer3
we
vsdf
sdf
gdf
ert
xcv
sdf
rwer
hfd
dfg
cvb
rwf
afb
dfh
jgh
bmn
lgh
rty
gfds
cxv
xcv
xcs
vdas
fdf
fgd
cv
sdf
tert
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
sdf
shasha9178
shasha9178
shasha9178
shasha9178
shasha9178
liflif2
liflif2
liflif2
liflif2
liflif2
liblib3
liblib3
liblib3
liblib3
liblib3
zhazha444
zhazha444
zhazha444
zhazha444
zhazha444
dende5
dende
denden
denden2
denden21
fenfen9
fenf619
fen619
fenfe9
fe619
sdf
sdf
sdf
sdf
sdf
zhazh90
zhazh0
zhaa50
zha90
zh590
zho
zhoz
zhozh
zhozho
zhozho2
lislis
lls95
lili95
lils5
liss9
sdf0ty987
sdft876
sdft9876
sdf09876
sd0t9876
sdf0ty98
sdf0976
sdf0ty986
sdf0ty96
sdf0t76
sdf0876
df0ty98
sf0t876
sd0ty76
sdy76
sdf76
sdf0t76
sdf0ty9
sdf0ty98
sdf0ty987
sdf0ty98
sdf6676
sdf876
sd876
sd876
sdf6
sdf6
sdf9876
sdf0t
sdf06
sdf0ty9776
sdf0ty9776
sdf0ty76
sdf8876
sdf0t
sd6
sdf06
s688876
sd688
sdf86