讲师中心 微信公众号
AI工具推荐 视频效率加速

php代码示例如何实现表单防重复提交_php防重复提交代码示例【示例】

小涛吖_6261

小涛吖_6261

发布时间:2026-01-28 15:09:09

|

552人浏览过

|

来源于php中文网

原创

最有效防重复提交需四层联动:1.前端按钮禁用+置灰;2.服务端session时间戳限频;3.一次性token校验并销毁;4.数据库唯一索引兜底。缺一不可。

php代码示例如何实现表单防重复提交_php防重复提交代码示例【示例】

用 session + 时间戳判断是否重复提交

用户快速连点提交按钮,或刷新页面后重发表单,最常见也最易实现的拦截方式就是靠服务端记录「上一次提交时间」。PHP 中用 $_SESSION 存一个时间戳,每次提交前比对间隔是否小于阈值(比如 2 秒):

session_start();
if (isset($_SESSION['last_submit_time']) && time() - $_SESSION['last_submit_time'] < 2) {
    die('提交过于频繁,请稍后再试');
}
$_SESSION['last_submit_time'] = time();

注意点:

  • 必须在 session_start() 后立即执行,否则 $_SESSION 不可用
  • 这个方案对同一浏览器有效,但无法防多标签/多窗口并发提交
  • 如果用户禁用 Cookie 或未维持 session,会失效

用一次性 token 防 CSRF 和重复提交

更可靠的做法是生成唯一 token,嵌入表单并存入 session,提交时校验且立即销毁。这是兼顾安全性与幂等性的标准做法:

session_start();
if (empty($_SESSION['form_token'])) {
    $_SESSION['form_token'] = bin2hex(random_bytes(16));
}
$token = $_SESSION['form_token'];

HTML 表单中加隐藏域:

立即学习“PHP免费学习笔记(深入)”;

<input type="hidden" name="token" value="<?php echo htmlspecialchars($token); ?>">

接收时验证并清空:

session_start();
if (!isset($_POST['token']) || $_POST['token'] !== $_SESSION['form_token']) {
    die('非法请求或重复提交');
}
unset($_SESSION['form_token']); // 关键:用完即焚

常见坑:

Session Handoff
Session Handoff

创建全面的交接文档,使新AI代理能够无缝继续工作,消除歧义。解决上下文耗尽问题。 时机:(1)用户请求保存交接,(2)上下文即将满,(3)主要任务完成,(4)会话结束,(5)恢复工作时。 关键词:保存状态、创建交接、上下文已满、暂停、从...恢复、加载交接、保存进度、会话转移、交接

下载
  • 没调用 unset($_SESSION['form_token']) 就返回成功,会导致后续合法提交失败
  • 没对 $token 做 htmlspecialchars() 输出,可能引发 XSS
  • 用 md5(time()) 这类可预测值当 token,容易被绕过

前端配合:按钮置灰 + 禁用重复点击

纯后端防不住所有情况,前端要第一时间阻断二次点击。关键不是靠 CSS 样式遮罩,而是真正禁用提交动作:

<form id="myForm">
  <button type="submit" id="submitBtn">提交</button>
</form>
<p><script>
document.getElementById('myForm').addEventListener('submit', function(e) {
const btn = document.getElementById('submitBtn');
btn.disabled = true;
btn.textContent = '提交中...';
});
</script>

注意:

  • 仅靠 btn.disabled = true 不够——用户刷新页面后仍可再点,必须和服务端 token 机制联动
  • 不要用 setTimeout 延迟恢复按钮,万一后端卡住,用户会以为没提交成功而狂点
  • 如果用了 AJAX 提交,记得在 fetch 或 axios 的 finally 里恢复按钮状态

数据库层加唯一约束兜底

即使前后端都做了防护,极端情况下(如网络超时导致用户误以为失败而重试),最终落地数据仍可能重复。这时靠数据库唯一索引是最硬的防线:

例如用户注册场景,要求 email 字段唯一:

ALTER TABLE users ADD UNIQUE KEY uk_email (email);

PHP 插入时捕获异常:

try {
    $pdo->prepare("INSERT INTO users (email, name) VALUES (?, ?)")->execute([$email, $name]);
} catch (PDOException $e) {
    if ($e->getCode() == 23000) { // MySQL 唯一键冲突错误码
        die('该邮箱已被注册');
    }
    throw $e;
}

这步常被跳过,但它才是真正防止脏数据入库的最后一道闸。尤其在分布式或高并发写入时,光靠应用层锁或 token 很难 100% 覆盖。

token 生效范围、session 生命周期、前端禁用时机、数据库约束粒度——这几个点稍有错位,重复提交就可能漏网。别只盯着一个环节使劲。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2093

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3274

2023.10.07

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

3060

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

360

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2893

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1161

2024.09.24

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

12179

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1206

2023.11.23

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

80

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 191人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn