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?
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.
}
}
}
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();
vous pouvez y parvenir en utilisant helper et CodeIgniter constructor.
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; } }
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 } }
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);
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.
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;
}
}
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");
}
}
}