我有一个登录控件的功能。 如果用户didnt登录重定向到login.php
在我的控制器,我有很多的功能,这功能代表了网页。 所以我一定要叫$this->is_logged_in();
函数中的每个函数。
例如:
class Admin extends CI_Controller{
function index(){
$this->is_logged_in(); // works fine like this
$this->load->view('admin/welcome_message');
}
function users(){
$this->is_logged_in(); // works fine like this
$this->load->view('admin/users');
}
function comments(){
$this->is_logged_in(); // works fine like this
$this->load->view('admin/comments');
}
}
我不想调用所有功能该功能。 当我把这种在结构的结果是:无限循环。
在应用程序/核心文件夹,并在其构造函数创建你自己的基本控制器做:
class MY_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
// Check that the user is logged in
if ($this->session->userdata('userid') == null || $this->session->userdata('userid') < 1) {
// Prevent infinite loop by checking that this isn't the login controller
if ($this->router->class != '<Name of Your Login Controller')
{
redirect(base_url());
}
}
}
}
然后所有的控制器只需要继承你的新控制器,然后所有请求都会检查该用户登录。
如果需要通过检查也这可能是更具体的$this->router->method
来匹配特定的动作。
添加该构造函数,你不会有写在每个功能。
function __construct() {
parent::__construct();
if(!$this->is_logged_in()):
redirect(base_url()."login.php");
}
public function __construct()
{
parent::__construct();
session_start();
if(!isset($_SESSION['username'])){
redirect('login');
}
}
定义谁是家长和检查函数的结果。 完成
做这样的事情的最好方法是使用钩子使用会话数据挂钩的笨
这将是所有你应该需要。