·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

由于网络延迟、cdn等线路,发帖、充值记录等有重复项问题

174 2

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发帖,有时候由于网络慢、国外cdn、国际线路等问题,居然发布成功两个一样的帖子,同标题,同内容。

运营 » 电子商务» 支付订单
同一时间,有两个订单号,金额用户等所有条件都一样,明显是重复项。

DZ去重机制还是不够强大,希望改进。
我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-17 14:06:45 | 查看全部
在Discuz!中,由于网络延迟、CDN等问题导致的重复发帖或重复订单问题,确实是一个常见的挑战。以下是一些可能的解决方案和改进建议:

### 1. **前端防重复提交**
   - **JavaScript防重复提交**:在前端页面中,可以通过JavaScript禁用提交按钮,防止用户多次点击提交按钮。例如:
   
  1. document.getElementById('submitBtn').addEventListener('click', function() {
  2.          this.disabled = true;
  3.          this.form.submit();
  4.      });
复制代码

   - **加载动画**:在提交表单时显示加载动画,提示用户正在处理中,避免用户多次点击。

### 2. **后端防重复提交**
   - **Token机制**:在表单提交时生成一个唯一的Token,并在后端验证该Token是否已经被使用过。如果Token已经被使用,则拒绝重复提交。
   
  1. // 生成Token
  2.      $token = md5(uniqid(rand(), true));
  3.      $_SESSION['form_token'] = $token;

  4.      // 在表单中隐藏Token
  5.      echo '<input type="hidden" name="form_token" value="' . $token . '">';

  6.      // 后端验证Token
  7.      if ($_POST['form_token'] !== $_SESSION['form_token']) {
  8.          die('重复提交');
  9.      }
  10.      unset($_SESSION['form_token']);
复制代码


   - **时间戳验证**:在提交表单时记录当前时间戳,并在后端验证两次提交的时间间隔是否过短。如果时间间隔过短,则拒绝重复提交。
   
  1. $last_submit_time = $_SESSION['last_submit_time'];
  2.      $current_time = time();
  3.      if ($current_time - $last_submit_time < 5) { // 5秒内不允许重复提交
  4.          die('请勿重复提交');
  5.      }
  6.      $_SESSION['last_submit_time'] = $current_time;
复制代码


### 3. **数据库去重**
   - **唯一索引**:在数据库中为关键字段(如帖子标题、订单号等)添加唯一索引,防止重复数据插入。
   
  1. ALTER TABLE `pre_forum_post` ADD UNIQUE (`subject`);
  2.      ALTER TABLE `pre_common_order` ADD UNIQUE (`orderid`);
复制代码

   - **事务处理**:在插入数据时使用数据库事务,确保操作的原子性,避免并发插入导致的重复数据。
   
  1. DB::query('START TRANSACTION');
  2.      // 插入数据
  3.      DB::query('INSERT INTO ...');
  4.      DB::query('COMMIT');
复制代码


### 4. **CDN优化**
   - **CDN缓存策略**:调整CDN的缓存策略,避免缓存动态内容。可以通过设置CDN的缓存规则,确保动态请求(如发帖、支付等)不被缓存。
   - **回源策略**:确保CDN在遇到动态请求时,直接回源到服务器,而不是从缓存中获取数据。

### 5. **日志记录与监控**
   - **日志记录**:在关键操作(如发帖、支付)中增加日志记录,记录每次操作的详细信息,便于后续排查重复提交问题。
   - **监控与报警**:设置监控系统,实时监控重复提交的情况,并在发现问题时及时报警。

### 6. **用户提示**
   - **友好提示**:在用户提交表单后,显示友好的提示信息,告知用户操作已成功,避免用户因网络延迟而重复提交。

### 7. **插件扩展**
   - **自定义插件**:如果现有的防重复机制无法满足需求,可以考虑开发自定义插件,进一步增强防重复提交的功能。可以参考DZ插件网的开发手册进行插件开发。

通过以上方法,可以有效减少由于网络延迟、CDN等问题导致的重复发帖或重复订单问题。如果你有进一步的需求或问题,欢迎继续咨询。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-19 07:00:05 | 查看全部
在Discuz!中,由于网络延迟、CDN等问题导致的重复发帖或重复订单问题,确实是一个常见的挑战。以下是一些可能的解决方案和改进建议:

### 1. 前端防重复提交
在前端页面中,可以通过JavaScript来防止用户多次点击提交按钮。例如,在用户点击提交按钮后,禁用按钮,直到请求完成。

  1. document.getElementById('submitButton').addEventListener('click', function() {
  2.     this.disabled = true;
  3.     // 提交表单
  4.     document.getElementById('form').submit();
  5. });
复制代码


### 2. 后端防重复提交
在后端处理请求时,可以通过生成一个唯一的令牌(token)来防止重复提交。这个令牌可以在表单提交时生成,并在处理请求时验证。

  1. // 生成令牌
  2. $token = md5(uniqid(rand(), true));
  3. $_SESSION['form_token'] = $token;

  4. // 在表单中隐藏字段
  5. echo '<input type="hidden" name="form_token" value="' . $token . '">';

  6. // 处理表单提交时验证令牌
  7. if ($_POST['form_token'] === $_SESSION['form_token']) {
  8.     // 处理表单
  9.     unset($_SESSION['form_token']);
  10. } else {
  11.     // 令牌不匹配,可能是重复提交
  12.     die('重复提交');
  13. }
复制代码


### 3. 数据库唯一性约束
在数据库中,可以通过设置唯一性约束来防止重复数据的插入。例如,对于订单表,可以设置订单号的唯一性约束。

  1. ALTER TABLE orders ADD UNIQUE (order_number);
复制代码


### 4. 使用队列处理请求
对于高并发的场景,可以使用消息队列来处理请求。将请求放入队列中,然后逐个处理,避免重复提交。

### 5. 优化CDN和网络配置
确保CDN和网络配置合理,减少网络延迟和抖动。可以考虑使用更快的CDN服务,或者优化服务器到CDN的线路。

### 6. 日志和监控
增加日志记录和监控,及时发现和处理重复提交的问题。可以通过日志分析工具来识别重复提交的模式,并采取相应的措施。

### 7. 插件或扩展开发
如果现有的机制无法满足需求,可以考虑开发一个插件或扩展来增强防重复提交的功能。可以参考Discuz!的插件开发手册,实现自定义的防重复提交逻辑。

### 8. 用户提示
在用户提交表单后,显示一个提示信息,告知用户请求正在处理中,避免用户多次点击提交按钮。

  1. showmessage('正在处理您的请求,请稍候...', '', array('timeout' => 2));
复制代码


通过以上方法,可以有效地减少由于网络延迟、CDN等问题导致的重复提交问题。希望这些建议对你有所帮助。如果有更多具体问题,欢迎继续咨询。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.216.116.226,GMT+8, 2025-4-20 20:24 , Processed in 0.312641 second(s), 79 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表