ThinkPHP 防止表单重复提交的方法
- 软件编程
- 2026-01-11 11:30:16
用户提交表单以后,点击浏览器后退按钮返回表单页面,这个时候浏览器会直接从缓存中取出页面,因此token验证一定是通不过的。
网上有许多种办法可以绕过这个问题,比如用location.replace()方法来替换当前历史记录,但是这样仍然有瑕疵。极端的情况,若用户在页面间切换多次,那么多点几次后退按钮很可能又回到了上一个表单页面。
解决办法是在http头中设置Cache-Control: no-cache, no-store。然而我尝试了无论是在页面head中添加 <meta http-equiv="Cache-Control" content="no-cache, no-store"> 还是在Action中输出 header("Cache-control: no-cache, no-store") 都无效。
查找了很久,发现问题出在ThinkPHP的模板渲染机制上,打开 ThinkPHP/Lib/Think/Core/View.class.php 看第173行
header("Cache-control: private"); //支持页面回跳 |
原来TP为了支持页面回跳,强制在每个模板输出之前都发送了一个Cache-control: private的头,这可真是帮了倒忙了。
把这行注释掉,删除TP核心缓存,再试一次,发现HTTP响应头成功改变了
# 解决办法
# 表单
# 这可
# 方法来
# 是在
# 有许多
# 这个时候
# 多点
# 历史记录
# 这个问题
# 几次
# 很可能
# 有一种
# 很久
# 找了
# 再试
# 帮了
# 送了
# ThinkPHP
# 出在
# 忙了
# 表单重复提交
# ThinkPHP表单自动提交验证实例教程
# TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
# thinkPHP5 ajax提交表单操作实例分析
# thinkPHP5框架实现基于ajax的分页功能示例
# Thinkphp5框架ajax接口实现方法分析
# ThinkPHP5 通过ajax插入图片并实时显示(完整代码)
# TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
# ThinkPHP5.1+Ajax实现的无刷新分页功能示例
# ThinkPHP提交表单时默认自动转义的解决方法
# thinkphp3.2实现在线留言提交验证码功能
# ThinkPHP防止重复提交表单的方法实例分析
# thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整
相关栏目:
【
教研文案 】
【
日常文案 】
【
AI模型 】
【
网络运营 】
【
营销推广 】
【
云计算 】
【
技术教程 】
【
软件编程 】
【
汉字学习 】
【
歌词歌曲 】
【
精选文章 】
相关推荐:
MySQL 如何连接对应的客户端进程
C语言中%c与%s的区别与划分详解
C# 使用HttpClient上传文件并附带其他参数的步骤
MYSQL字符串强转的方法示例
Java 二分查找的实现及图例解析
C# 设置防火墙的创建规则
Java Gradle项目中的资源正确获取方式
SpringBoot整合Xxl-Job的完整步骤记录
ASP.NET Core使用HostingStartup增强启动操作方法详解
JavaWeb入门教程之分页查询功能的简单实现
C# 实现Table的Merge,Copy和Clone
docker容器无法访问宿主机端口的解决
Python偏函数实现原理及应用
Node.js文本文件BOM头的去除方法
Linux 使用shell脚本处理字符串的实现
Springcloud seata分布式事务实现代码解析
Vue如何跨组件传递Slot的实现
MySQL数据库锁机制原理解析
uni-app 自定义底部导航栏的实现
Java中i++的一些问题总结
给Docker更换国内镜像源操作
C# Dockpanel入门基础必看篇
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Windows系统下MySQL无法启动的万能解决方法
HTTP头隐藏PHP版本号实现过程解析
c# 根据NPOI 读取一个excel 文件的多个Sheet
超简单实现Docker搭建个人博文系统
C#使用ML.Net完|成人|工智能预测
总结python 三种常见的内存泄漏场景
python基于socket模拟实现ssh远程执行命令
docker 使用CMD或者ENTRYPOINT命令同时启动多个服务
关于Mysql update修改多个字段and的语法问题详析
微信小程序实现天气预报功能(附源码)
JavaScript实现网页tab栏效果制作
asp.net core 使用 TestServer 来做集成测试的方法
Mybatis或Mybatis-Plus框架的xml文件中特殊符号的使用详解
关于小程序优化的一些建议(小结)
python进行二次方程式计算的实例讲解
Mysql8.0.22解压版安装教程(小白专用)
五分钟带你了解Java的接口数据校验
vue 插槽简介及使用示例
Java程序执行过程及内存机制详解
解决goland新建项目文件名为红色的问题
python3 os进行嵌套操作的实例讲解
C++模板元编程实现选择排序
在 Python 中使用 7zip 备份文件的操作
JavaGUI实现随机单词答题游戏
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
C# double类型变量比较分析
python 解决函数返回return的问题
本文转自网络,如有侵权请联系客服删除。
热门内容推荐
C#使用虚拟方法实现多态
- 2026-01-11
JavaScript原生对象之String对象的属性和方法详解
- 2026-01-11
js实现DOM走马灯特效的方法
- 2026-01-11
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
- 2026-01-11
php实现微信公众平台账号自定义菜单类
- 2026-01-11
