国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

ThinkPHP 防止表單重復提交的方法

2024-05-04 23:17:30
字體:
來源:轉載
供稿:網友
然而有一種情況,是防止不了的:

用戶提交表單以后,點擊瀏覽器后退按鈕返回表單頁面,這個時候瀏覽器會直接從緩存中取出頁面,因此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 防止表單重復提交的方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉黎县| 浙江省| 襄樊市| 纳雍县| 商水县| 台东市| 南岸区| 哈巴河县| 新野县| 沂南县| 青阳县| 葵青区| 都安| 哈密市| 双鸭山市| 娱乐| 大竹县| 东至县| 桑日县| 肥东县| 舒兰市| 玛纳斯县| 淮南市| 沈丘县| 怀宁县| 中山市| 嘉禾县| 怀仁县| 乌兰县| 普洱| 伊川县| 雷山县| 黄大仙区| 溧阳市| 乌恰县| 那曲县| 高青县| 临潭县| 苍溪县| 故城县| 固阳县|