我的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']);
}
}
}
我收到以下错误
在非对象
上调用成员函数库()
答案 0 :(得分:2)
考虑到更改核心类,我在应用程序的核心文件夹中扩展了MY_Securtiy类。并重定向到过去的页面。
文件位置: application \ core \ MY_Security.php
?>
<script> window.location="your_url.php" </script>
<?php
答案 1 :(得分:0)
感谢您的解决方案,但是通过将新请求的请求类型更改为GET,返回代码302似乎更好,无论原始请求中使用的类型(例如POST)如何。下次刷新不会问任何问题。