例如:多次点击提现按钮

 问题描述:

        在提现操作中,用户可能会多次点击提现按钮,导致多个相同的请求发送到服务器,从而引发重复提现的问题。为了解决这一问题,必须保证每个提现请求只能执行一次,防止重复提交操作。

两种常见的解决方案

方案 1:基于浏览器页面打开的时候生成 Token

实现步骤:
  1. 生成唯一提现票据(Token)

    • 逻辑:当用户进入提现页面时,后端生成一个唯一的 Token(如 UUID)。该 Token 会被存储到 Redis 中,并设置较短的有效期(如 5 秒)。

    • 返回给前端:后端将该 Token 返回给前端,前端每次提交提现请求时,必须携带该 Token

  2. 校验 Token

    • 逻辑:每次提现请求时,后端会校验请求中的 Token 是否存在且未过期。

      • 如果 Token 不存在已失效,后端直接返回 "重复请求" 错误信息,拒绝继续处理。

      • 如果 Token 存在且未过期,后端继续处理提现请求,并将该 Token 从 Redis 中删除,防止重复提交。

适用场景
  • 适用于防止用户短时间内多次点击提现按钮的场景。

  • Token 的有效期较短,适用于需要快速防止重复请求的情况。

优点
  • 简单易实现:只需在后端生成并校验 Token,通过短期有效的 Token 快速避免重复请求。

  • 避免短时间内的重复提交:有效防止用户因误操作或延迟导致的多次请求。

缺点
  • 有效期短:如果用户在 5 秒(或设置的短期有效期内)没有再次点击提现,Token 会失效,导致无法继续提交请求。

  • 用户体验差:若用户长时间未操作,Token 会过期,需要重新获取新的 Token。此时,如果用户未刷新页面,可能会导致不必要的操作中断,影响用户体验。

假如说,如果遇到下面的问题呢:
  • 用户在 5 分钟未点击操作,或者第一次点击后 5 分钟没有刷新页面,之后再次点击会失败。由于 Token 已过期,系统会认为是重复请求,导致用户无法继续提现。


方案 2:基于首次点击按钮才生成 Token ,并存储于前端

实现步骤:
  1. 生成并存储 Token

    • 逻辑:当用户首次点击提现按钮时,后端生成一个唯一的 Token,并存储到 Redis 中(例如:5秒)。

    • 返回给前端:后端将该 Token 返回给前端,前端将其存储在浏览器(如 localStoragesessionStorage或者请求头)中。

  2. 后续请求验证 Token

    • 逻辑:每次用户点击提现按钮时,前端会从浏览器缓存中取出 Token,并将其作为请求的一部分传递给后端。

    • 后端校验 Token

      • 如果 Token 已存在,说明该请求是重复点击,拒绝继续执行,并提示用户:“您已提交提现请求,请等待处理”。

      • 如果 Token 不存在,说明是新的提现请求,后端重新生成并存储新的 Token,并继续处理提现请求。

适用场景
  • 适合长时间有效的操作场景,特别是用户可能在较长时间内未刷新页面的情况下,系统仍然能够处理提现请求。

  • 适用于长时间内防止重复提交问题。

优点
  • 避免 Token 过期问题:用户在打开浏览器页面后较长时间内可以随时提交提现请求,而不需要担心 Token 过期。

    • 因为不是打开页面创建的Token,是首次点击才创建Token

缺点
  • 依赖前端存储:需要依赖前端(如 localStoragesessionStorage)来存储 Token,如果用户清除浏览器缓存或者使用隐私模式,可能导致 Token 丢失。

  • 增加系统复杂度:需要保证前后端 Token 的同步,避免出现 Token 被滥用的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97366.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97366.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97366.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql zip包安装步骤

下载地址 windows MSI Install 安装包程序。 这里下载zip包,执行安装过程 确认my.ini 配置的路径,创建mysql数据服务的data目录管理员身份cmd 进入bin目录,开始初始化服务 mysqld --initialize-insecure --usermysql mysqld -install#启动…

Python 的 argparse 模块中,add_argument 方法的 nargs 参数

在 Python 的 argparse 模块中,add_argument 方法的 nargs 参数用于指定命令行参数可以接受的参数数量。你提到的 nargs* 和 nargs 是两种常见设置,它们分别表示不同的参数数量要求。以下是两者的详细区别和含义:1. nargs*: 接受零个或多个参…

嵌入式Linux LED驱动开发

嵌入式Linux LED驱动开发 一、LED驱动概述 本笔记基于IMX6ULL处理器的LED驱动开发,详细介绍了字符设备驱动开发的基本流程。该驱动实现了对LED的基本控制功能,通过字符设备接口供用户空间程序调用。 二、LED驱动核心概念 1. 寄存器地址定义 本驱动涉…

Excel Word Pdf 格式转换

引入aspose包手动更新本地mvn仓库mvn install:install-file -DfileC:\aspose-cells-22.9.jar -DgroupIdaspose -DartifactIdaspose-cells -Dversion22.9 -Dpackagingjar mvn install:install-file -DfileC:\aspose-pdf-22.9.jar -DgroupIdaspose -DartifactIdaspose-pdf -Dvers…

变频器实习DAY40 调整测试零伺服PI LDO

目录变频器实习DAY40一、工作内容1.1 调整测试零伺服PI二、学习内容2.1 LDOLDO的核心工作原理——“采样-比较-调整”闭环控制LDO的关键参数——选型核心依据LDO与其他稳压器的选型对比附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)变频器实习DAY40 一、工作内容 1.1 调整…

【半导体制造流程概述】

半导体制造流程概述 半导体制造是一个高度复杂且精密的过程,涉及多个关键步骤,通常分为以下几个主要阶段:设计、晶圆制备、光刻、刻蚀、掺杂、薄膜沉积、互连和封装测试。 文章目录半导体制造流程概述晶圆制备光刻刻蚀掺杂薄膜沉积互连封装测…

为什么大模型需要文档预处理:从数据到智能的关键一步

在人工智能,尤其是大语言模型(LLM, Large Language Models)的应用落地过程中,数据质量与处理流程的重要性正逐渐被各行各业所认识。无论是企业内部构建知识库、自动化文档审核,还是面向用户提供智能问答服务&#xff0…

50.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--二期功能规划

啰嗦了这么多文章,我们终于进入到了二期功能的开发。这篇文章我们先来规划一下二期要做的功能,在一期功能中,我们完成了基础的记账功能,但是作为一个记账软件,仅有这些功能是远远不够的。我们需要更多的功能来满足用户…

Oracle下载安装(学习版)

1. 下载(学习版) 网址:软件下载 | Oracle 中国 2. 安装 解压缩 双击可执行文件 下一步 选同意,下一步 下一步 设置密码(自己记住) 开始安装 测试安装是否成功

`basic_filebuf`、`basic_ifstream`、`basic_ofstream`和 `basic_fstream`。

C 文件 I/O 模板类深度解析 文章目录C 文件 I/O 模板类深度解析1. basic_filebuf 深度解析1.1 类模板定义详解1.2 关键成员变量1.3 核心成员函数实现原理1.3.1 open() 函数实现1.3.2 overflow() 函数实现1.4 完整示例:自定义缓冲策略2. basic_ifstream 深度解析2.1 …

计算机毕设 java 阿歹果园养鸡场管理系统 基于 SSM 框架的果园养鸡场全流程管理系统设计与实现 Java+MySQL 的养殖生产与进销存一体化平台开发

计算机毕设 java 阿歹果园养鸡场管理系统ky7dc9 (配套有源码 程序 mysql数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联xi 可分享 随着农业养殖规模化发展,传统果园养鸡场依赖人工记录、纸质台账的管理模式&#xf…

生成式BI工具(WrenAI)

生成式 BI 工具支持自然语言查询数据库,自动生成 SQL 与可视化图表,被金融分析师和数据科学家广泛采用。 WrenAI是由Canner团队开发的开源生成式BI(GenBI)智能体,致力于通过自然语言交互实现数据库查询、可视化生成和洞…

论文Review 3DGS PGSR | TVCG2024 ZJU-3DV | 几何约束的3DGS表面重建

基本信息 题目:PGSR: Planar-based Gaussian Splatting for Efficient and High-Fidelity Surface Reconstruction 来源:TVCG2024 学校:ZJU-3DV 是否开源:https://github.com/zju3dv/PGSR 摘要:3DGS表面重建 最近…

最新After Effects2025下载安装(含安装包)AE 2025 保姆级下载一键安装图文教程

文章目录一、After Effects 2025下载二、After Effects 2025安装教程三、核心功能升级详解四、系统配置与兼容性说明一、After Effects 2025下载 ①夸克网盘下载链接:https://pan.quark.cn/s/a06e6200e64c 二、After Effects 2025安装教程 1.解压安装包:找到下载…

【网络安全领域】边界安全是什么?目前的发展及应用场景

在网络安全领域,边界安全(Perimeter Security) 是指围绕企业或组织网络的 “物理与逻辑边界” 构建的防护体系,核心目标是阻止未授权访问从外部网络(如互联网、合作方网络)侵入内部可信网络,同时…

虚拟机快照对内存与磁盘空间的影响

核心概念:快照是什么?虚拟机快照捕获的是在某个特定时间点上虚拟机的完整状态。这包括:磁盘状态:虚拟磁盘的数据。内存状态:当时虚拟机内存中的所有内容(如果选择)。配置状态:虚拟机…

免费开源的 Gemini 2.5 Flash 图片生成器

免费开源的 Gemini 2.5 Flash 图片生成器:gemini-nano-banana 项目详解 在 AI 图片生成领域,大多数工具要么收费昂贵,要么需要复杂的配置。今天为大家介绍一个完全免费开源的解决方案——gemini-nano-banana,一个基于 Google Gemi…

介绍分布式事务之Seata

简介 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式事务解决方案。 🚀 一、Seata 的四种主要模式 Seata 提供的分布式事…

安卓/ios按键精灵脚本开发工具:OpenCV.FindImgAll命令介绍

函数名称OpenCV.FindImgAll 找图返回全部结果函数功能使用OpenCV多尺度模板找图,返回全部结果与FindPic的区别:OpenCV找图:基于特征相似性的找图,允许一定几何形变或颜色差异,从而提高多分辨率容兼及抗干扰能力&#x…

Linux时间处理函数

gettimeofday 是 Linux 系统中一个用于获取当前时间的系统调用函数。它能够获取从 Unix 纪元&#xff08;1970年1月1日 00:00:00 UTC&#xff09;到当前时刻的秒数和微秒数。函数原型#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);参…