当我尝试重新提交csrf_protection设置为true的表单时,Codeigniter显示错误

时间:2017-02-02 11:54:33

标签: codeigniter csrf-protection

我的CI网站有csrf保护。

$config['csrf_protection'] = TRUE;

因此,当我通过刷新重新提交表单时,我收到以下错误。

  

不允许您请求的操作

我希望它返回到最后一页,而不是显示此消息。

因此,我尝试通过扩展 CI_Security 文件来覆盖 csrf_show_error()方法。

这是我的课程,位于 application / core / My_Security.php

class MY_Security extends CI_Security {

    public function __construct()
    {
        parent::__construct();
        $this->load->library('user_agent');
    }

    public function csrf_show_error()
    {
        // show_error('The action you have requested is not allowed.');  // default code

        // force page "refresh" - redirect back to itself 
        // a page refresh restores the CSRF cookie      
        if ($this->agent->is_referral())
        {
            redirect(site_url());

        } else {            
            redirect($_SERVER['HTTP_REFERER']);         
        }        
    }
}

我收到以下错误

  

在非对象

上调用成员函数库()

2 个答案:

答案 0 :(得分:2)

考虑到更改核心类,我在应用程序的核心文件夹中扩展了MY_Securtiy类。并重定向到过去的页面。

文件位置: application \ core \ MY_Security.php

?>
<script> window.location="your_url.php" </script>   
<?php 

答案 1 :(得分:0)

感谢您的解决方案,但是通过将新请求的请求类型更改为GET,返回代码302似乎更好,无论原始请求中使用的类型(例如POST)如何。下次刷新不会问任何问题。