色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

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響應頭成功改變了

php技術ThinkPHP 防止表單重復提交的方法,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 岳阳市| 佛学| 海丰县| 霍城县| 三台县| 宜章县| 广东省| 宁津县| 揭阳市| 明溪县| 朝阳区| 南丹县| 神木县| 重庆市| 清原| 弋阳县| 昌乐县| 铜陵市| 临夏市| 交城县| 文成县| 象山县| 敖汉旗| 亚东县| 西峡县| 安新县| 永昌县| 县级市| 出国| 拜城县| 嘉义县| 安塞县| 拜泉县| 崇信县| 牡丹江市| 藁城市| 南汇区| 三都| 左权县| 抚顺市| 岢岚县|