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 相关文章推荐
phpfans留言版用到的install.php
Jan 04 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
php按单词截取字符串的方法
Apr 07 PHP
php常用表单验证类用法实例
Jun 18 PHP
ThinkPHP路由详解
Jul 27 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
php 的反射详解及示例代码
Aug 25 PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 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
新版PHP将向Java靠拢
2006/10/09 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
javascript some()函数用法详解
2014/11/13 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
JavaScript效率调优经验
2009/06/04 Javascript
JavaScript window.location对象
2014/11/14 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
详解Python的Django框架中的模版相关知识
2015/07/15 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
简单了解python协程的相关知识
2019/08/31 Python
Python中zip函数如何使用
2020/06/04 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
internal修饰符起什么作用
2013/12/16 面试题
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
公务员培训心得体会
2013/12/28 职场文书
差生评语大全
2014/05/04 职场文书
车辆转让协议书
2014/09/24 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
Python pyecharts绘制条形图详解
2022/04/02 Python
配置nginx负载均衡
2022/05/06 Servers