ThinkPHP 防止表单重复提交的方法


Posted in PHP onAugust 08, 2011

然而有一种情况,是防止不了的:

用户提交表单以后,点击浏览器后退按钮返回表单页面,这个时候浏览器会直接从缓存中取出页面,因此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的模板渲染机制上,打开 ThinkPHP/Lib/Think/Core/View.class.php 看第173行

header("Cache-control: private");  //支持页面回跳

原来TP为了支持页面回跳,强制在每个模板输出之前都发送了一个Cache-control: private的头,这可真是帮了倒忙了。

把这行注释掉,删除TP核心缓存,再试一次,发现HTTP响应头成功改变了

ThinkPHP 防止表单重复提交的方法
PHP 相关文章推荐
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 PHP
帝国cms常用标签汇总
Jul 06 PHP
PHP模拟http请求的方法详解
Nov 09 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
PHP实现简单的计算器
Aug 28 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 #PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 #PHP
php Smarty初体验二 获取配置信息
Aug 08 #PHP
php中Smarty模板初体验
Aug 08 #PHP
PHP 防注入函数(格式化数据)
Aug 08 #PHP
PHP中将数组转成XML格式的实现代码
Aug 08 #PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 #PHP
You might like
同时提取多条新闻中的文本一例
2006/10/09 PHP
php数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
jquery控制display属性为none或block
2014/03/31 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
Django中Forms的使用代码解析
2018/02/10 Python
python监控文件并且发送告警邮件
2018/06/21 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
校园报刊亭的创业计划书
2014/01/02 职场文书
给护士表扬信
2014/01/19 职场文书
服务之星获奖感言
2014/01/21 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
我的小天地教学反思
2014/04/30 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
坎儿井导游词
2015/02/09 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android