Foros del Web » Programando para Internet » PHP » CodeIgniter »

codeigniter login de usuario en el constructor

Estas en el tema de codeigniter login de usuario en el constructor en el foro de CodeIgniter en Foros del Web. Hola buenas, Estoy desarrollando el típico panel de administración, ( mi primer trabajo con codeigniter ), y quería saber cual es la mejor manera de ...
  #1 (permalink)  
Antiguo 25/05/2011, 02:57
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
codeigniter login de usuario en el constructor

Hola buenas,

Estoy desarrollando el típico panel de administración, ( mi primer trabajo con codeigniter ), y quería saber cual es la mejor manera de comprobar si la sesión de usuario admin esta activa o no.. yo ahora estoy usando la típica comprobación

Código PHP:
if ($this->session->userdata('logged_in')) { 
En cada uno de los métodos de mis controladores.. pero me parece un poco engorroso... se puede hacer esta comprobación de otra manera? por ejemplo, en el constructor de cada clase?

Añado el siguiente código que acabo de encontrar:

Código PHP:
Ver original
  1. function checkSession()
  2. {
  3.     if (!$this->session->userdata('is_logged_in'))
  4.     {
  5.         //the session has expired!
  6.         $data['title'] = "Session expired";
  7.  
  8.         redirect('welcome', 'refresh');
  9.     }
  10. }

Código PHP:
Ver original
  1. $this->checkSession();

Así sería correcto?


Un saludo!

Última edición por miktrv; 25/05/2011 a las 03:04
  #2 (permalink)  
Antiguo 25/05/2011, 07:16
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años, 1 mes
Puntos: 24
Respuesta: codeigniter login de usuario en el constructor

Claro, funcionaria. Una funcion asi la podrias colocar en algun helper, si tienes alguna libreria que controle sesiones la podrias poner ahi, o, si te animas podrias extender la libreria session que viene con Codeigniter.

Acordate que en caso de que sea helper o libreria tenes que obtener una instancia para poder usar las clases cargadas en CI, por ej:
Código PHP:
Ver original
  1. //En los controladores se hace asi
  2. echo $this->session->userdata('is_logged_in');
  3.  
  4. //Pero en helpers y librerias, haces asi
  5. $CI = & get_instance();
  6. echo $CI->session->userdata('is_logged_in');

De paso te dejo un tutorial en donde crea un sistema de usuarios con una funcion parecida. Lo use bastante y anda bien, tal vez lo veas viejo, pero creo que no cambie nada y a veces lo sigo usando en la version 2.0.2. Si no quieres implementar toda la clase mira el codigo asi podes aprender una manera mas de administrar la sesion.
http://www.noquieroprogramar.com/tag/centinela/

Espero que te sirva
Saludos
  #3 (permalink)  
Antiguo 25/05/2011, 07:49
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: codeigniter login de usuario en el constructor

Hey!! muchas gracias por tu ayuda, muy amable,

Lo miro aver que tal, de momento usaré el código posteado porque me parece muy cómodo, jeje


Un saludo!
  #4 (permalink)  
Antiguo 25/05/2011, 08:55
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: codeigniter login de usuario en el constructor

Cita:
Iniciado por miktrv Ver Mensaje
Hola buenas,

Estoy desarrollando el típico panel de administración, ( mi primer trabajo con codeigniter ), y quería saber cual es la mejor manera de comprobar si la sesión de usuario admin esta activa o no.. yo ahora estoy usando la típica comprobación

Código PHP:
if ($this->session->userdata('logged_in')) { 
En cada uno de los métodos de mis controladores.. pero me parece un poco engorroso... se puede hacer esta comprobación de otra manera? por ejemplo, en el constructor de cada clase?

Añado el siguiente código que acabo de encontrar:

Código PHP:
Ver original
  1. function checkSession()
  2. {
  3.     if (!$this->session->userdata('is_logged_in'))
  4.     {
  5.         //the session has expired!
  6.         $data['title'] = "Session expired";
  7.  
  8.         redirect('welcome', 'refresh');
  9.     }
  10. }

Código PHP:
Ver original
  1. $this->checkSession();

Así sería correcto?


Un saludo!

Hacerlo en una libreria o un helper te va a ahorar trabajo, pero no quita de hacerlo como lo estas haciendo. Ahora para que este disponible en todos tus metodos sin tener que repetir lo mismo, usa las funcionalidades de PHP5

Código PHP:
Ver original
  1. class tuController extends Controller{
  2.  
  3. public function __construct() {
  4.         parent::__construct();
  5.         // Check if the logged user
  6.         $this->access_library->check_logged_in();
  7.        }
  8.  
  9. function .....{
  10.  
  11. }
  12. }


En tu access_library haces las operaciones pertinentes en este caso: si el usuario no esta logueado y no se encuentra en la session, rediririgir al form de login.

Ejm:

Código PHP:
Ver original
  1. class Access_library
  2. {
  3.     // Constructor
  4.     public function __construct()
  5.     {
  6.         if (!isset($this->CI))
  7.         {
  8.             $this->CI =& get_instance();
  9.         }
  10.     }
  11.  
  12.     public function check_logged_in()
  13.     {
  14.         if ($this->CI->session->userdata('logged_in') != TRUE)
  15.         {
  16.             redirect('user/login', 'refresh');
  17.             exit();
  18.         }
  19.     }
  20.         }

Puse el codigo como referencia y segun recuerdo, no esta probado, pero la idea esta presente.-
__________________
Drupal Argentina
  #5 (permalink)  
Antiguo 25/05/2011, 10:21
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: codeigniter login de usuario en el constructor

De acuerdo muchas gracias por la información,

Respecto lo de usar el get instance, es solo para la versión 4 de php, no?

Muchas gracias y un saludo!
  #6 (permalink)  
Antiguo 26/05/2011, 06:50
 
Fecha de Ingreso: marzo-2010
Mensajes: 71
Antigüedad: 14 años, 1 mes
Puntos: 24
Respuesta: codeigniter login de usuario en el constructor

Funciona en php5 tambien. Tal vez consultaste por el =&, pero no hay problema, si usas php5 quitalo si queres.

Saludos
  #7 (permalink)  
Antiguo 26/05/2011, 07:28
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: codeigniter login de usuario en el constructor

Cita:
Iniciado por RatoN7 Ver Mensaje
Funciona en php5 tambien. Tal vez consultaste por el =&, pero no hay problema, si usas php5 quitalo si queres.

Saludos
De acuerdo, muchas gracias por tu ayuda!

Un saludo!
  #8 (permalink)  
Antiguo 27/05/2011, 06:33
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: codeigniter login de usuario en el constructor

Como te dijo RatonN7 agrega compatiblididad con PHP4 pero lo podes dejar asi si trabajas con PHP5.

Código PHP:
Ver original
  1. $this->CI = get_instance();

Saludos.
__________________
Drupal Argentina

Etiquetas: frameworks-y-php-orientado-a-objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.