我如何在我的其他CodeIgniter控制器中使用__construct函数

时间:2010-07-13 04:55:53

标签: php class codeigniter

我在这个构造函数中有一个controller被调用的成员

function __construct()
  {
  parent::Controller();
  $this->is_logged_in();
  }

我想在我的其他控制器中检查用户是否已登录我如何在名为profile和其他人的其他控制器中使用此功能

这是我使用CodeIgniter的第一个项目

3 个答案:

答案 0 :(得分:2)

您的身份验证检查应该在库中:

这是一个基本的codigniter认证脚本的摘录:

class Site_sentry 
{
    function Site_sentry()
    {
        $this->obj =& get_instance();
    }

function is_logged_in()
{
    if ($this->obj->session) 
    {
        if ($this->obj->session->userdata('session_logged_in'))
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
    else
    {
        return FALSE;
    }
} 

   function login_routine()
   {
     //do login here (enter into session)
   }
}

此库存储在 application / libraries 下的文件名后面,文件名为.php后缀。

然后您可以将其添加到自动加载配置文件 application / conig / config.php

$autoload['libraries'] = array('database', 'site_sentry', 'session');

或在每个控制器中手动加载:

$this->load->library('Site_sentry);

然后你可以在控制器中检查你的会话,如下所示:

 class Class extends Controller{

    function Class()
    {   
       parent::Controller();
       if( $this->site_sentry->is_logged_in() == FALSE){
            redirect('managerlogin/');
        }

    }
   }

另请查看此文档页面http://codeigniter.com/user_guide/libraries/sessions.html;特别感兴趣的是将会话存储到数据库部分。

答案 1 :(得分:0)

我不认为在课堂上这样做是最好的主意。如果用户已登录,则应检查session内的标志(值或其他),这样您就不需要使用其他控制器。

优势在于可以更轻松地访问会话,这是更常见的方法。

答案 2 :(得分:0)

会话示例:

class SomeClass extends Controller {

function __construct()
{
    parent::Controller();   
    $this->is_logged_in();
}   

function is_logged_in()
{

    $is_logged_in = $this->session->userdata('is_logged_in');
    if(!isset($is_logged_in) || $is_logged_in != TRUE) 
    {
        redirect('login');
    }
}