如何在CodeIgniter中使用库中的会话


How can I use session in a library in CodeIgniter?

我想通过使用控制器构造函数中的库来检查用户是否登录了CodeIgniter。

这是我的图书馆:

class Administrator_libs {
    public function validate_authen(){
        if( $this->session->userdata('user_authen') ){
            redirect(base_url().'admin/login/');
        }   
    }
}

这是我的控制器:

class Administrator extends CI_Controller {
    public function __construct(){
        parent::__construct();
        $this->load->library('administrator_libs');
        $this->administrator_libs->validate_authen();
        $this->load->model('mod_menu');
    }
}

但我收到了这个错误消息:

Undefined property: Administrator_libs::$session

如何在CodeIgniter中使用库中的会话?

如果您想访问自己内部的任何CodeIgniter库,则必须调用get_instance()。这是因为$this绑定到当前库,而不是CodeIgniter对象。

$CI =& get_instance();
if( $CI->session->userdata('user_authen') ){
    redirect(base_url().'admin/login/');
}

请参阅创建库CodeIgniter文档。特别是使用库中的CodeIgniter资源下的内容

这假设您在config/autoload.php中自动加载会话库,如果没有,您还需要在$CI实例化后添加$CI->load->library("session");

重要信息:=&不是打字错误。它是通过引用传递的,以节省内存。

您应该简单地转到application/autoload.php并添加您的自动加载包,它看起来应该有点像这样:$autoload['packages'] = array('database','form_validation','session','email');

您可以看到我在程序包中添加了会话程序包。现在进入构造函数,您应该通过添加以下内容来加载此包:$this->load->library("session");

Session和任何其他lib/helper等从CI_Controller/CI_Model/等扩展。。。如果您试图在不从任何CI模块扩展的库上使用$this->whatever,则会出现错误。正如Jordan所说,你可以使用get_instance。