Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查用户是否在整个应用程序中登录_Php_Codeigniter - Fatal编程技术网

Php 检查用户是否在整个应用程序中登录

Php 检查用户是否在整个应用程序中登录,php,codeigniter,Php,Codeigniter,我正在使用ion_auth,我需要检查用户是否已登录。ion auth提供函数$this->ion\u auth->logged\u in(),因此我检查如下: if (!$this->ion_auth->logged_in()) { redirect('auth/login'); } 但是我在控制器的所有功能中都发布了这个。如何让它到处检查?最简单的方法是在\u构造中调用函数一次 public function __construct() { parent

我正在使用ion_auth,我需要检查用户是否已登录。ion auth提供函数
$this->ion\u auth->logged\u in()
,因此我检查如下:

if (!$this->ion_auth->logged_in()) {
        redirect('auth/login');
}

但是我在控制器的所有功能中都发布了这个。如何让它到处检查?

最简单的方法是在
\u构造中调用函数一次

public function __construct()
{
    parent::__construct();
    if (!$this->ion_auth->logged_in()) {
        redirect('auth/login');
    } //if not logged in redirect, for all sections
}
这将使它在所有的功能上工作。您还可以扩展core,使其在所有控制器上工作
application/core/MY_Login.php

<?php 

class MY_Login extends CI_Output {

  function check_login(){
    if (!$this->ion_auth->logged_in()) {
        redirect('auth/login');
    } //if not logged in redirect, for all sections
  }

}

创建一个核心控制器,核心控制器将有一个构造函数,您将在那里进行检查。现在,所有控制器都需要扩展核心控制器,而不是CI控制器。其内容如下:

application/controllers/your_controller.php

class Your_controller extends MY_Controller{
      function __construct(){
          parent::__construct(); 
     }
 }
class MY_Controller extends CI_Controller{
      function __construct(){
          parent::__construct();
           if (!$this->ion_auth->logged_in()) {
               redirect('auth/login');
           }
     }
 }
application/core/MY_Controller.php

class Your_controller extends MY_Controller{
      function __construct(){
          parent::__construct(); 
     }
 }
class MY_Controller extends CI_Controller{
      function __construct(){
          parent::__construct();
           if (!$this->ion_auth->logged_in()) {
               redirect('auth/login');
           }
     }
 }

对每个控制器执行此操作将在每次有人访问任何页面时运行此功能,因此请确保对其进行更改,使其在您希望的区域中具体工作。现在如果你也在登录页面上,它会重定向你。要么让登录页面不扩展核心控制器(不推荐),要么在函数周围添加另一个if()语句。

虽然您可以创建自己的控制器,就像从CI_控制器派生的MY_控制器一样,但这并不是它的用途

CodeIgniter支持称为钩子的东西,钩子是在特定时刻运行的脚本,非常类似于事件。存在一个钩子,每次调用任何控制器时都会调用它,而不必在控制器本身中实现任何东西


阅读更多内容

您可以将其添加到构造函数中并扩展该类。这里的更多信息:虽然将其放入控制器构造函数中不是一件坏事,但以这种方式扩展核心通常不是一个好主意,主要是因为不需要派生。这是我想要听到的答案。