如果用户登录或未登录CodeIgniter

时间:2012-03-03 18:11:59

标签: php codeigniter authentication

当用户登录或注册时,他的$_SESSION['username']获取其用户名的值。我想让他们只有在注册时才能访问某些控制器。但我不喜欢写这个的想法:

function __construct()
{
  session_start();
  if(empty($_SESSION['username']))
     die();

  parent::__construct();
}

在每个控制器中我都不希望无人识别的人看到。有没有更好的方法呢?感谢。

3 个答案:

答案 0 :(得分:4)

您可以考虑扩展基本控制器类(请参阅the Codeigniter Wiki Article on extending the class)以提供require_login功能:

class MY_Controller extends CI_Controller {

  protected function require_login() {
    if(empty($_SESSION['username']))
      die();
    }
  }

完成此操作后,您可以在要保护的每个控制器的构造函数中调用require_login()

function __construct() {
  $this->require_login();
}

最后,您可以考虑利用Codeigniter $_SESSION库或an equivalent,而不是使用PHP的session超全局进行会话存储。

答案 1 :(得分:1)

Codeigniter有own session, not $_SESSION

除此之外,如果你有相同类型的控制器,你可以编写一个基本控制器并从中扩展。基本控制器可以包含用于验证控制器是否可访问的代码,并且您不需要在您创建的每个控制器类中编写该代码。请参阅How do I extend the code igniter controller class?

答案 2 :(得分:1)

function __construct()  {

parent::Controller();
$this->authenticate();

}

function authenticate()
{
   if (!$this->session->userdata('admin_loggedIn'))
  {
  redirect('login');
  }
}