国产探花免费观看_亚洲丰满少妇自慰呻吟_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 防止表單重復提交的方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙坪坝区| 合川市| 双柏县| 浪卡子县| 东山县| 西吉县| 梅河口市| 乳山市| 安顺市| 南通市| 阿坝县| 庆安县| 平顶山市| 达拉特旗| 金门县| 阿克苏市| 桃园县| 章丘市| 洛宁县| 大新县| 澎湖县| 东兴市| 张家港市| 长泰县| 米脂县| 古田县| 黄山市| 彭泽县| 乌兰察布市| 庆元县| 安顺市| 鹤岗市| 双桥区| 乳山市| 维西| 大关县| 唐河县| 闵行区| 汶川县| 中牟县| 洛南县|