0

0

Laravel表单重复提交怎么解决_Laravel防止重复请求方法

冰火之心

冰火之心

发布时间:2025-11-30 10:13:02

|

953人浏览过

|

来源于php中文网

原创

答案:laravel中防止表单重复提交可通过csrf保护、一次性令牌、缓存去重及前端禁用按钮结合实现。首先启用csrf确保请求合法性,再生成唯一token提交后验证并销毁;利用redis或文件缓存记录用户ip与id组成的键,设置时间窗口限制重复请求;前端提交时禁用按钮防止多次点击。服务端校验为核心,前端优化提升体验,二者结合可有效杜绝重复提交问题。

laravel表单重复提交怎么解决_laravel防止重复请求方法

在Laravel中防止表单重复提交,主要是为了避免用户多次点击提交按钮导致数据重复插入或操作重复执行。这个问题在支付、订单提交等场景中尤为关键。以下是几种实用的解决方案。

使用Laravel内置的CSRF保护

Laravel默认启用了CSRF(跨站请求伪造)保护,能有效防止非法请求,也能在一定程度上减少重复提交的风险。

确保你的表单中包含CSRF字段:


    @csrf
    

虽然CSRF主要防的是跨域请求,但结合一次性令牌机制,可以为后续的防重逻辑打下基础。

使用一次性令牌(Token机制)

你可以通过生成唯一token来防止重复提交。用户每次加载表单时生成一个token,提交后验证并销毁该token。

示例实现:

  • 在控制器中生成唯一token并传给视图:
  • $token = uniqid('form_');
    session(['form_token' => $token]);
    return view('form', compact('token'));
  • 表单中加入隐藏字段:
  • 提交时验证token:
  • if ($request->form_token !== session('form_token')) {
        return back()->with('error', '表单已提交,请勿重复操作');
    }
    // 验证通过后清除token
    session()->forget('form_token');

利用缓存系统实现请求去重

Laravel提供了强大的缓存支持,可以用Redis或文件缓存记录请求指纹,防止短时间内重复提交。

A1.art
A1.art

一个创新的AI艺术应用平台,旨在简化和普及艺术创作

下载

例如:根据用户ID + 路由 + 时间窗口生成唯一键:

$key = 'submit_' . $request->ip() . '_' . $request->user_id;
if (Cache::has($key)) {
    return response(['message' => '请勿重复提交'], 429);
}
Cache::put($key, true, now()->addSeconds(60)); // 60秒内不可重复提交

这种方式适合API接口或高频操作的防护。

前端配合:按钮禁用与Loading提示

虽然服务端必须做校验,但前端也可以提升用户体验。

提交后立即禁用按钮:

或使用JavaScript:

document.getElementById('submitBtn').addEventListener('click', function(e) {
    this.disabled = true;
    this.innerText = '提交中...';
});

注意:前端限制可被绕过,仅作为辅助手段。

基本上就这些方法。最稳妥的方式是服务端使用缓存或数据库记录状态 + 前端交互优化,两者结合才能真正杜绝重复提交问题。不复杂但容易忽略。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

340

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

293

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

772

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

141

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

80

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.7万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号