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 函数学习简单小结
Jul 08 PHP
php学习笔记 数组的常用函数
Jun 13 PHP
组合算法的PHP解答方法
Feb 04 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
destoon复制新模块的方法
Jun 21 PHP
PHP基于数组实现的分页函数实例
Aug 20 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
php生成高清缩略图实例详解
Dec 07 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
Docker搭建自己的PHP开发环境
Feb 24 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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
不错的JS中变量相关的细节分析
2007/08/13 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Python中的作用域规则详解
2015/01/30 Python
python简单分割文件的方法
2015/07/30 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
浅析matlab中imadjust函数
2020/02/27 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
美国眼镜网:GlassesUSA
2017/09/07 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
普罗米修斯教学反思
2014/02/06 职场文书
总裁助理岗位职责
2014/02/17 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
教师个人教学总结
2015/02/11 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python