手机版

ThinkPHP防止表单重复提交的方法

时间:2021-10-18 来源:互联网 编辑:宝哥软件园 浏览:

但是,有一种情况是无法阻止的:用户提交表单后,点击浏览器返回按钮返回表单页面。此时浏览器会直接从缓存中取出页面,所以令牌验证肯定会失败。网上有很多方法可以规避这个问题,比如用location.replace()替换当前的历史记录,但是还是有缺陷。在极端情况下,如果用户在页面之间切换几次,后退按钮可能会返回到上一个表单页面。解决方案是在http头中设置cache-control:无缓存、无存储。但是,我尝试在Action的页面头或输出头(“cache-control: no-cache,no-store”)中添加meta http-equiv=“cache-control”内容=“no-cache,no-store”。

找了很久,发现问题出在ThinkPHP的模板渲染机制上。打开think PHP/lib/think/core/view . class . PHP,查看第173行的标题(“cache-control: private”)。//支持页面跳回。为了支持页面跳回,TP强制在每个模板输出前发送一个Cache-control:私有头,这真的帮了我们一把。注释掉这一行,删除TP核心缓存,再试一次,发现HTTP响应头已经成功更改

版权声明:ThinkPHP防止表单重复提交的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。