如何拒绝在codeigniter框架中访问控制器功能

时间:2014-07-28 16:06:07

标签: php codeigniter

如何保护控制器中的功能?
假设用户已登录,只需输入网址即可直接访问任何功能。

有人说使用私人功能.....
有人说使用下划线前缀来表示函数

但是没有明确的解释如何去做以及如何运作。

希望你们能让它更清晰。

谢谢大家。

2 个答案:

答案 0 :(得分:2)

根据CI文档建议,并且由于检查用户是否已登录是您可能希望在许多控制器中执行的常见任务,因此应首先创建一个具有检查用户是否已登录的方法。如下所示:

class MY_Controller extends CI_Controller
{
  function __construct()
  {
    parent::__construct();
  }

  protected function _user_is_logged_in()
  {
     // logic which checks various conditions and returns a boolean
  }
}

然后,当您为站点声明各种其他控制器时,您可以使用此控制器:

class Welcome extends My_Controller
{
  public function index()
  {
     if(!$this->_user_is_logged_in()) 
     {
       // redirect, exit, show a 403, etc;
     }
  }

}

CodeIgniter框架有一个功能,它可以防止以下划线为前缀的方法被用作页面回调:

http://ellislab.com/codeigniter/user-guide/general/controllers.html#private

在声明这些方法时,将这些方法定义为privateprotected显然会分别影响其范围,定义和扩展。

答案 1 :(得分:1)

您可以使用下划线前缀在控制器中创建私有函数。

http://ellislab.com/codeigniter/user-guide/general/controllers.html#private

  

在某些情况下,您可能希望某些功能对公共访问隐藏。要将函数设为私有,只需添加下划线作为名称前缀,它将不会通过URL请求提供。例如,如果你有这样的函数:

private function _utility()
{
  // some code
}
  

尝试通过URL访问它,就像这样,不起作用:

     

example.com/index.php/blog/_utility /