web-dev-qa-db-ger.com

codeigniter-Prüfung für Benutzersitzung in jedem Controller

Ich habe diese private Sitzung in einem meiner Controller, die prüft, ob ein Benutzer angemeldet ist:

function _is_logged_in() {

   $user = $this->session->userdata('user_data');

   if (!isset($user)) { 
      return false; 
   } 
   else { 
      return true;
   }

}

Das Problem ist, dass ich mehr als einen Controller habe. Wie kann ich diese Funktion in diesen anderen Steuerungen verwenden? Die Neudefinition der Funktion in jedem Controller ist nicht sehr "TROCKEN".

Irgendwelche Ideen?

38
user393964

Eine weitere Option ist das Erstellen eines Basiscontrollers. Platzieren Sie die Funktion im Basiscontroller und erben Sie davon.

Um dies in CodeIgniter zu erreichen, erstellen Sie eine Datei mit dem Namen MY_Controller.php im Bibliotheksordner Ihrer Anwendung.

class MY_Controller extends Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function is_logged_in()
    {
        $user = $this->session->userdata('user_data');
        return isset($user);
    }
}

Lassen Sie dann Ihren Controller von diesem Basiscontroller erben.

class X extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function do_something()
    {
        if ($this->is_logged_in())
        {
            // User is logged in.  Do something.
        }
    }
}
53
Stephen Curran

Legen Sie es in einen Helfer und laden Sie es automatisch.

helpers/login_helper.php:

function is_logged_in() {
    // Get current CodeIgniter instance
    $CI =& get_instance();
    // We need to use $CI->session instead of $this->session
    $user = $CI->session->userdata('user_data');
    if (!isset($user)) { return false; } else { return true; }
}

config/autoload.php:

$autoload['helper'] = array('login');

Dann können Sie in Ihrem Controller Folgendes anrufen:

is_logged_in();
35
Rocket Hazmat

Dies erreichen Sie mit helper und CodeIgniter-Konstruktor.

  1. Sie können den benutzerdefinierten Helfer my_helper.php erstellen, in dem Sie Ihre Funktion schreiben 

    function is_logged_in() {
      $user = $this->session->userdata('user_data');
      if (!isset($user)) { 
       return false; 
      } 
     else { 
       return true;
     }
    } 
    
  2. Im Controller, wenn seine login.php

    class Login extends CI_Controller {
    
        public function __construct()
        {
            parent::__construct();
            if(!is_logged_in())  // if you add in constructor no need write each function in above controller. 
            {
             //redirect you login view
            }
        }
    
6
prash.patil

Holen Sie sich alle Benutzerdaten aus der Sitzung.

Im Controller

$userData = $this->session->all_userdata();

In der View

print_r($userData);
3
Sumith Harshan

Ich denke, das Verwenden von Haken ist ziemlich einfach. Erstellen Sie einfach einen Hook, um $this->session->user zu überprüfen. Es wird in jeder Anfrage aufgerufen.

2
Rakesh

Fügen Sie dies einfach in Ihre Ordner-Kerndatei ci_controller unter function __construct () ein, um alle Controller () zu überprüfen:

function __construct() 
{
    parent::__construct();
    if(! $user = $this->session->userdata('user_data');)
    {
         return false;
    }
}
1

Ich habe wie oben beschrieben codiert .. Und das läuft für mich Erzeuge Datei my_helper.php

<?php 
    function _is_logged_in() {
        if(isset($_SESSION['username'])){
            return true;        
        } else {
            return false;
        }
    }
?>

Bearbeiten Sie die Datei autoload.php

$autoload['helper'] = array('my');

In Ihrer Controller-Datei

class Welcome extends CI_Controller {

    public function __construct(){
        parent::__construct();

        if(!_is_logged_in())  
        {
            redirect("Login");
        }
    }
}
0
Huseyin