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模型 】
【
网络运营 】
【
营销推广 】
【
云计算 】
【
技术教程 】
【
软件编程 】
【
汉字学习 】
【
歌词歌曲 】
【
精选文章 】
相关推荐:
详解IDEA社区版(Community)和付费版(UItimate)的区别
Java代码精简之道(推荐)
用ldap作为django后端用户登录验证的实现
使用PyCharm官方中文语言包汉化PyCharm
Java中多线程与并发_volatile关键字的深入理解
Selenium关闭INFO:CONSOLE提示的解决
JS实现可以用键盘方向键控制的动画
一篇超完整的Vue新手入门指导教程
微信小程序实现倒计时功能
IdeaGo启动报错Failed to create JVM的问题解析
C语言 用while循环求和的平均值操作
Python 2.6.6升级到Python2.7.15的详细步骤
详解BeautifulSoup获取特定标签下内容的方法
jQuery实现简单弹幕制作
react中hook介绍以及使用教程
C# 使用 OleDbConnection 连接读取Excel的方法
详解prometheus监控golang服务实践记录
解决docker加载新的镜像后repository和tag名称都为none的问题
关于Mysql update修改多个字段and的语法问题详析
nginx对http请求处理的各个阶段详析
python给list排序的简单方法
Docker运行springboot项目的实现
使用BeautifulSoup4解析XML的方法小结
Asp.Net Core实现Excel导出功能的实现方法
PHP实现腾讯短网址生成api接口实例
解决python3输入的坑——input()
5 分钟读懂Python 中的 Hook 钩子函数
关于springmvc-servlet中的配置小知识详解
Springcloud GateWay网关配置过程图解
Spring Boot接口幂等插件用法示例解析
详解C# List<T>的Contains,Exists,Any,Where性能对比
Python创建文件夹与文件的快捷方法
MySQL编码不一致可能引起的一些问题
python实现图片,视频人脸识别(opencv版)
docker镜像导入导出备份迁移的操作
docker 在容器外执行某个容器内的某个命令操作
pandas将list数据拆分成行或列的实现
微信小程序实现音乐播放页面布局
JQuery+drag.js上传图片并且实现图片拖曳
解决Goland中利用HTTPClient发送请求超时返回EOF错误DEBUG
python 自定义异常和主动抛出异常(raise)的操作
GoLand 2025.3 正式发布有不少新功能(支持泛型)
SpringBoot基于自定义注解实现切面编程
docker文件存放路径, 获取容器启动命令操作
微信小程序实现分页加载效果
java awt实现计算器功能
java中方法递归的简单示例
PHP哈希表实现算法原理解析
java初学者如何让编程学习起来更简单
docker修改未启动容器的配置信息操作
本文转自网络,如有侵权请联系客服删除。
热门内容推荐
C#使用虚拟方法实现多态
- 2026-01-11
JavaScript原生对象之String对象的属性和方法详解
- 2026-01-11
js实现DOM走马灯特效的方法
- 2026-01-11
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
- 2026-01-11
php实现微信公众平台账号自定义菜单类
- 2026-01-11
