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面试题附答案
Jan 07 PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 PHP
php include加载文件两种方式效率比较
Aug 08 PHP
PHP递归返回值时出现的问题解决办法
Feb 19 PHP
PHP字符串的连接的简单实例
Dec 30 PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
Joomla简单判断用户是否登录的方法
May 04 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
Mar 15 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 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入门教程 精简版
2009/12/13 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
JQuery小知识
2010/10/15 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
django 信号调度机制详解
2019/07/19 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
2014年五四青年节活动策划书
2014/04/22 职场文书
道德之星事迹材料
2014/05/03 职场文书
新入职员工工作总结
2015/10/15 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书