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 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
php中截取字符串支持utf-8
Jan 18 PHP
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
深入php内核之php in array
Nov 10 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 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 skymvc 一款轻量、简单的php
2011/06/28 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
Python下线程之间的共享和释放示例
2015/05/04 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
python的debug实用工具 pdb详解
2019/07/12 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
七年级上册语文教学计划
2015/01/22 职场文书
胡桃夹子观后感
2015/06/11 职场文书
从事会计工作年限证明
2015/06/23 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
Python的三个重要函数详解
2022/01/18 Python