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 常用字符串函数总结
Mar 15 PHP
php 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
在PHP上显示JFreechart画的统计图方法
Nov 03 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
php获取一个变量的名字的方法
Sep 05 PHP
解决php表单重复提交实现方法
Sep 29 PHP
smarty学习笔记之常见代码段用法总结
Mar 19 PHP
php parse_str() 函数的定义和用法
May 23 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 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:风雨欲来 路在何方?
2006/10/09 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
Angular的$http与$location
2016/12/26 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
使用Python下载Bing图片(代码)
2013/11/07 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
Pyqt5自适应布局实例
2019/12/13 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
jupyter notebook 重装教程
2020/04/16 Python
Python列表如何更新值
2020/05/27 Python
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
初中高效课堂实施方案
2014/02/26 职场文书
世界环境日活动总结
2015/02/11 职场文书
警示教育片观后感
2015/06/17 职场文书
安全教育第一课观后感
2015/06/17 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL