ThinkPHP 防止表單重復提交的方法
用戶提交表單以后,點擊瀏覽器后退按鈕返回表單頁面,這個時候瀏覽器會直接從緩存中取出頁面,因此token驗證一定是通不過的。
網(wǎng)上有許多種辦法可以繞過這個問題,比如用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") 都無效。

查找了很久,發(fā)現(xiàn)問題出在ThinkPHP的模板渲染機制上,打開 ThinkPHP/Lib/Think/Core/View.class.php 看第173行
header( "Cache-control: private" ); //支持頁面回跳 |
原來TP為了支持頁面回跳,強制在每個模板輸出之前都發(fā)送了一個Cache-control: private的頭,這可真是幫了倒忙了。
把這行注釋掉,刪除TP核心緩存,再試一次,發(fā)現(xiàn)HTTP響應頭成功改變了

- TP5(thinkPHP5)框架基于ajax與后臺數(shù)據(jù)交互操作簡單示例
- thinkPHP5 ajax提交表單操作實例分析
- thinkPHP5框架實現(xiàn)基于ajax的分頁功能示例
- Thinkphp5框架ajax接口實現(xiàn)方法分析
- ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)
- TP5(thinkPHP5)框架使用ajax實現(xiàn)與后臺數(shù)據(jù)交互的方法小結(jié)
- ThinkPHP5.1+Ajax實現(xiàn)的無刷新分頁功能示例
- ThinkPHP表單自動提交驗證實例教程
- ThinkPHP提交表單時默認自動轉(zhuǎn)義的解決方法
- thinkphp3.2實現(xiàn)在線留言提交驗證碼功能
- ThinkPHP防止重復提交表單的方法實例分析
- thinkphp5 + ajax 使用formdata提交數(shù)據(jù)(包括文件上傳) 后臺返回json完整實例
相關(guān)文章
探討file_get_contents與curl效率及穩(wěn)定性的分析
本篇文章是對file_get_contents與curl效率及穩(wěn)定性進行了詳細的分析介紹,需要的朋友參考下2013-06-06PHP結(jié)合jquery ajax實現(xiàn)上傳多張圖片,并限制圖片大小操作示例
這篇文章主要介紹了PHP結(jié)合jquery ajax實現(xiàn)上傳多張圖片,并限制圖片大小操作,涉及php結(jié)合jQuery ajax文件上傳及文件屬性相關(guān)操作技巧,需要的朋友可以參考下2019-03-03php中突破基于HTTP_REFERER的防盜鏈措施(stream_context_create)
如果考慮突破防盜鏈的措施,就需要考慮在 HTTP_REFERER 上面做手腳了。很多網(wǎng)站是通過referer來判斷是否盜鏈。2011-03-03PHP iconv()函數(shù)字符編碼轉(zhuǎn)換的問題講解
今天小編就為大家分享一篇關(guān)于PHP iconv()函數(shù)字符編碼轉(zhuǎn)換的問題講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03php實現(xiàn)使用正則將文本中的網(wǎng)址轉(zhuǎn)換成鏈接標簽
本文給大家分享一段php中使用正則表達式將網(wǎng)址轉(zhuǎn)換成A鏈接的函數(shù)代碼,十分簡潔實用,這里推薦給大家2014-12-12使用PHP連接多種數(shù)據(jù)庫的實現(xiàn)代碼(mysql,access,sqlserver,Oracle)
我們今天為大家介紹的PHP連接數(shù)據(jù)庫的方法包括在MYSQL數(shù)據(jù)庫、ACCESS數(shù)據(jù)庫、MS SQL數(shù)據(jù)庫和Oracle數(shù)據(jù)庫中實現(xiàn)2016-12-12