作者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/cn.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