vérification du codeigniter pour la session de l'utilisateur dans chaque controller

j'ai cette séance privée dans un de mes contrôleurs qui vérifie si un utilisateur est connecté:

function _is_logged_in() {

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

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

}

Problème est que j'ai plus d'un Contrôleur. Comment puis-je utiliser cette fonction dans les autres contrôleurs? Redéfinir la fonction dans chaque contrôleur n'est pas très "sec".

des idées?

36
demandé sur el_pup_le 2010-09-09 21:01:11

7 réponses

une Autre option est de créer un contrôleur de base. Placez la fonction dans le contrôleur de base puis héritez de ceci.

pour réaliser ceci dans CodeIgniter, créez un fichier appelé MY_Controller.php dans le dossier Bibliothèques de votre application.

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

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

alors faites hériter votre controller de ce controller de base.

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
répondu Stephen Curran 2010-09-11 08:29:57

le mettre dans un helper et autoload il.

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');

puis dans votre controller vous pouvez appeler:

is_logged_in();
34
répondu Rocket Hazmat 2010-09-10 16:38:36

vous pouvez y parvenir en utilisant helper et CodeIgniter constructor.

  1. vous pouvez créer un helper personnalisé my_helper.php en écrire votre fonction

    function is_logged_in() {
      $user = $this->session->userdata('user_data');
      if (!isset($user)) { 
       return false; 
      } 
     else { 
       return true;
     }
    } 
    
  2. dans le contrôleur si son 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
répondu prash.patil 2015-12-04 02:46:01

Obtenir toutes les données de l'utilisateur de la session.

Dans le Controller,

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

Dans le View,

print_r($userData);
3
répondu Sumith Harshan 2014-07-21 16:29:24

je pense qu'utiliser des crochets est assez facile. Il suffit de créer un crochet pour vérifier $this->session->user. Il sera appelé à chaque demande.

2
répondu Rakesh 2015-09-08 05:17:23

il suffit d'ajouter cela sur votre fichier de base de dossier ci_controller à la fonction _ _ construct () pour vérifier tous les controller ():

function __construct() 
{
    parent::__construct();
    if(! $user = $this->session->userdata('user_data');)
    {
         return false;
    }
}
1
répondu indonesia-dennis 2015-12-04 02:44:45

j'ai codé comme ceci selon les réponses ci-dessus.. Et c'est la course pour moi Créer un fichier my_helper.php

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

Modifier dans autoload.fichier php

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

dans votre fichier de contrôle

class Welcome extends CI_Controller {

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

        if(!_is_logged_in())  
        {
            redirect("Login");
        }
    }
}
0
répondu Huseyin 2018-09-12 23:04:19