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 相关文章推荐
一个显示天气预报的程序
Oct 09 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
PHP 批量删除 sql语句
Jun 05 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
php使用curl获取https请求的方法
Feb 11 PHP
php支付宝手机网页支付类实例
Mar 04 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
PHP基于工厂模式实现的计算器实例
Jul 16 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 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
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
用PHP来写记数器(详细介绍)
2006/10/09 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
解析yii数据库的增删查改
2013/06/20 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
对numpy中shape的深入理解
2018/06/15 Python
Python for循环中的陷阱详解
2018/07/13 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python读取几个G的csv文件方法
2019/01/07 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
《小松树和大松树》教学反思
2014/02/20 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
劳动竞赛口号
2014/06/16 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
学校周年庆活动方案
2014/08/22 职场文书
2014年生产部工作总结
2014/12/17 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
小组组名及励志口号
2015/12/24 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
thinkphp 获取控制器及控制器方法
2021/04/16 PHP