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分页显示制作详细讲解
Oct 09 PHP
php strcmp使用说明
Apr 22 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
php获取参数的几种方法总结
Feb 18 PHP
php不使用插件导出excel的简单方法
Mar 04 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
10款实用的PHP开源工具
Oct 23 PHP
PHP数组实例详解
Jun 26 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 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 远程图片保存到本地的函数类
2008/12/08 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
php使用websocket示例详解
2014/03/12 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
Python代码太长换行的实现
2019/07/05 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
党委书记岗位职责
2013/11/24 职场文书
党风廉设责任书
2014/04/16 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
单位单身证明样本
2014/10/11 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
暂停营业通知
2015/04/25 职场文书
使用python绘制横竖条形图
2022/04/21 Python