前端设计
按钮设置点击一次
按钮设置只可以点击一次。多次点击无效
设置token
token机制。进入页面获得token,发送请求携带token。
重定向
点击提交后,客户端重定向。
session
服务端生成唯一标识,存入session中,同时写入表单隐藏域。提交时同时提交,与session中的进行比较。相同移除session中的唯一标识,进行后续操作,不相等标识重复提交,不做处理。
后端设计
唯一索引
设置唯一索引,重复插入数据库报异常。不会生成脏数据
token+ redis
分两个阶段:申请token阶段和业务操作阶段
例如支付:
- 首先,在进入提交订单页面之前,订单系统根据用户信息向支付系统发送token申请,支付系统将生成的token保存到redis缓存中
- 然后,订单系统带着token去发起支付请求,支付系统对比redis中的token,存在,执行支付逻辑,删除token,不存在标识非法请求。
设置多个状态
例如订单设置status有多个状态,待支付,支付中,支付完成等状态,根据状态更新。
乐观锁
先查询得到锁,更新数据同时更新锁。
例如:version = 1 ,更新时version+1,再次更新时version=1就会更新失败。