作者k80092 (遊)
看板PHP
標題[請益] CI框架的csrf錯誤頁面
時間Wed Nov 23 09:39:36 2016
菜鳥碼農的我最近開發一個案子,為了防止重複送出有用到csrf
在codeigniter中,可以在application/views/errors/html/error_general.php
中自訂show_error()後的頁面,我想問的是,我如果override
csrf_error()或是show_error()後,有辦法讓他跳到某個controller中
或是如同一般controller使用嗎?
因為我如果要override csrf_error()的話,繼承的不是CI_Controller
,就算用&get_interface()也無法調用controller的任何方法...
沒有辦法很好的說明真是不好意思:(,總之架構上來說就是在core裡有
A->繼承CI_Controller,存放了我在所有Controller要用到的所有方法
之後每一張Controller都是繼承了A,然後因為我的每個頁面的表頭表尾
都是一樣的,所以用了三個view組成一個畫面,現在我希望將錯誤訊息只
顯示在中間的view,但如果去改ci預設的那張php的話,雖然畫面上可以
達成,但因為我的頁面表頭有分成不同使用者有不同選單,沒靠controller
裡的方法無法判定,所以想問看看有沒有什麼方法可以辦到讓show_error()
或csrf_error()可以呼叫controller裡的東西呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.27.106.212
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PHP/M.1479865179.A.464.html
1F:→ MOONRAKER: 為什麼用到三個view會檢查三次 一頁有三個controller嗎 11/23 13:38
2F:→ MOONRAKER: 沒聽過There cannot be two tigers in one mountain嗎 11/23 13:38
並不是一次有三個controller...是在一個controller中使用了多個$this->load->view()
檢查三次??我有提到檢查三次嘛@@??
3F:→ xdraculax: 把自訂錯誤作成 A 裡的 function _show_error 裡面就 v 11/23 20:35
4F:→ xdraculax: iew 那頁,判斷錯誤的時候 return $this->_show_error( 11/23 20:35
5F:→ xdraculax: 'csrf') 11/23 20:35
6F:→ xdraculax: MY_Security protected $_csrf_error = FALSE; 11/23 21:38
7F:→ xdraculax: csrf_show_error() { $this->_csrf_error = TRUE; 11/23 21:39
8F:→ xdraculax: 加個 function 在 controler 去查 Security csrf_error 11/23 21:41
謝謝回答
不過我還是不太清楚,不過查了查,好像似乎沒辦法像我說那樣作,因為在載
入CI_Security之前,helper或是libraries都還沒被載入,所以只能夠用原始
的PHP代碼去建立東西:(
參考:
http://stackoverflow.com/questions/14406922/prevent-from-displaying-the-default-csrf-error-page-in-codeigniter
※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:19:57
※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:30:07
※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:30:50
9F:→ xdraculax: CI_Security 可以被 MY_Security 改寫 11/24 09:38
我有改寫了,只是因為沒辦法使用controller中的寫法,也沒辦法呼叫helper所以
沒辦法做出我要的東西,謝謝你的回答,我再研究看看:),有研究出來再來回文~
10F:→ MOONRAKER: 阿只有一個controller為什麼還會「希望錯誤訊息只顯示 11/24 13:07
11F:→ MOONRAKER: 在中間的view」描述模模糊糊還怪別人喔 11/24 13:08
我有提到說我一個畫面是用多個view組成,我想您應該會知道一個controller可
以載入多個view吧?我也沒有怪別人,我一開始就有說我也說不太清楚。總之謝
謝您的回答,耍嘴皮子既沒辦法改善問題,也不會讓世界更好。我就此打住。
※ 編輯: k80092 (61.27.106.212), 11/24/2016 19:02:14
12F:→ xdraculax: 不需要在 Security 就把想要的頁面在裡面產生,只要把 11/24 19:26
13F:→ xdraculax: 結果記下,讓 controller 能去讀取後再跑 view 就可以 11/24 19:26
14F:→ xdraculax: 了,其實我上面的留言已把重點都留了 11/24 19:26
15F:→ k80092: 他跑完csrf_show_error()就停在錯誤訊息的頁面,沒有進任 11/24 19:55
16F:→ k80092: 何一個controller中的說...@_@ 11/24 19:56
17F:→ k80092: x大的意思是先把錯誤訊息保存起來後再進controller把他讀 11/24 19:57
18F:→ k80092: 出來沒錯吧? 11/24 19:57
19F:推 et69523820: 把錯誤訊息保存 在輸出到樣版變數即可 就可以顯示你 11/25 07:24
20F:→ et69523820: 指定的錯誤訊息顯示區域 11/25 07:25
21F:→ xdraculax: 如果你改過他還是被 csrf_show_error 帶去預設錯誤頁 11/25 11:22
22F:→ xdraculax: 表示你的 MY_Security 可能沒有改成功 11/25 11:26
23F:→ xdraculax: danny22.idv.tw/download/ci_csrf_test.zip 11/25 11:51
24F:→ k80092: 搞定了,謝謝x大,原來我一直以為進了csrf_show_error()後 11/28 12:07
25F:→ k80092: 就不會回到controller,結果自己寫了個exit耍笨了,抱歉:( 11/28 12:10