钉钉防止表单重复提交的功能主要通过 Token机制 实现,具体原理和实现方式如下:
一、核心原理
-
唯一标识生成
当用户访问表单页面时,系统会生成一个唯一的 Token (通常为随机字符串),并将其存储在服务器端(如Session)和表单的隐藏字段中。
-
提交时验证
用户提交表单时,系统会验证隐藏字段中的Token是否与服务器端存储的Token一致。如果一致,则处理表单数据并删除Token;如果不一致,则拒绝处理,防止重复提交。
-
防止篡改
由于Token是随机生成的且与用户会话绑定,即使表单被篡改,其他用户提交的表单仍无法使用该Token,从而避免重复提交。
二、实现步骤
-
生成Token并存储
-
在用户访问表单页面时,通过服务器端代码生成随机Token(例如使用
session
存储):session_start(); $token = bin2hex(random_bytes(30)); // 生成32位十六进制Token session['form_token'] = $token;
-
将生成的Token添加到表单的隐藏字段中:
<input type="hidden" name="form_token" value="<?php echo htmlspecialchars($token); ?>">
-