最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ThinkPHP 防止表單重復(fù)提交的方法

 更新時(shí)間:2011年08月08日 21:38:32   作者:  
防止表單重復(fù)提交有很多種方法,其不外乎,客戶端腳本防止刷新,服務(wù)端token驗(yàn)證等等,thinkphp內(nèi)置了表單token驗(yàn)證,可以方便的防止表單重復(fù)提交
然而有一種情況,是防止不了的:

用戶提交表單以后,點(diǎn)擊瀏覽器后退按鈕返回表單頁(yè)面,這個(gè)時(shí)候?yàn)g覽器會(huì)直接從緩存中取出頁(yè)面,因此token驗(yàn)證一定是通不過(guò)的。

網(wǎng)上有許多種辦法可以繞過(guò)這個(gè)問(wèn)題,比如用location.replace()方法來(lái)替換當(dāng)前歷史記錄,但是這樣仍然有瑕疵。極端的情況,若用戶在頁(yè)面間切換多次,那么多點(diǎn)幾次后退按鈕很可能又回到了上一個(gè)表單頁(yè)面。

解決辦法是在http頭中設(shè)置Cache-Control: no-cache, no-store。然而我嘗試了無(wú)論是在頁(yè)面head中添加 <meta http-equiv="Cache-Control" content="no-cache, no-store"> 還是在Action中輸出 header("Cache-control: no-cache, no-store") 都無(wú)效。

查找了很久,發(fā)現(xiàn)問(wèn)題出在ThinkPHP的模板渲染機(jī)制上,打開 ThinkPHP/Lib/Think/Core/View.class.php 看第173行

header("Cache-control: private");  //支持頁(yè)面回跳

原來(lái)TP為了支持頁(yè)面回跳,強(qiáng)制在每個(gè)模板輸出之前都發(fā)送了一個(gè)Cache-control: private的頭,這可真是幫了倒忙了。

把這行注釋掉,刪除TP核心緩存,再試一次,發(fā)現(xiàn)HTTP響應(yīng)頭成功改變了

相關(guān)文章

最新評(píng)論

沙湾县| 自贡市| 江安县| 准格尔旗| 城固县| 新源县| 武城县| 西峡县| 新绛县| 大竹县| 建瓯市| 九龙城区| 新乐市| 秦皇岛市| 江安县| 通道| 苍南县| 温泉县| 新泰市| 高清| 五莲县| 永川市| 广元市| 册亨县| 玛沁县| 隆德县| 寻乌县| 阿鲁科尔沁旗| 甘洛县| 纳雍县| 康定县| 岳池县| 德保县| 昭平县| 兴国县| 冀州市| 石景山区| 武安市| 砚山县| 南丰县| 林西县|