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

Problema con sesiones en codeigniter

Estas en el tema de Problema con sesiones en codeigniter en el foro de CodeIgniter en Foros del Web. Estimados: Tengo problemas con mis datos de sesiones en codeigniter, cada vez que se cambia de controlador la session se crea de nuevo pero no ...
  #1 (permalink)  
Antiguo 05/10/2012, 12:51
 
Fecha de Ingreso: febrero-2011
Ubicación: quito
Mensajes: 19
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Problema con sesiones en codeigniter

Estimados:

Tengo problemas con mis datos de sesiones en codeigniter, cada vez que se cambia de controlador la session se crea de nuevo pero no se mantienen los userdata explico como tengo configurado mi framework.

Código PHP:
$config['sess_cookie_name']        = 'cendendt.com';
$config['sess_expiration']        = 300;
$config['sess_expire_on_close']    = TRUE;
$config['sess_encrypt_cookie']    = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']        = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent']    = FALSE;
$config['sess_time_to_update']    = 300
como pueden ver he modificado algunos parámetros, he estado cambiando los valores pero no funciona, cada vez que se carga una pagina diferente se reinicia la cookie... estaba revisando los valores de la cookie y me di cuenta que se reiniciaban cada vez que se cambia de controlador, e la base de datos pasa lo mismo solamente cuando cambio de controlador se crea un nuevo registro de la cookie con los valores por defecto, perdón si estoy mal pero tengo entendido que la galleta debería mantenerse por 300 segundos según mi configuración pero esto no está pasando. ¿Que es lo que estoy haciendo mal?

También he probado con las dos maneras de cargar la librería de session, lo hice con el autoload y lo hice desde el constructor de cada controlador. pero la situación es la misma. ya me leí el manual de session de framework y no se que es lo que estoy omitiendo.. :(
Código PHP:

    
/**
    * Funcion constructora
    */
    
public function __construct(){
        
parent::__construct();        

        
$this->load->library('session')    ;
        
$this->load->model('m_basedatos');        
        
$this->load->library('form_validation');        
    } 
Forma e la que agrego informcion a session, lo cual funcionamuy bien

Código PHP:
$sesion_data = array(
                                
'user' => $usuario,
                                
'estado' => 'loged'
                                
);
            
$this->session->set_userdata($sesion_data); 
La forma como se destruye funciona bien lo que no funciona es la "vida" de la variable



Espero que me puedan ayudar...

Gracias -_-

Última edición por accxell_ax3c; 05/10/2012 a las 12:54 Razón: complemento de informacion
  #2 (permalink)  
Antiguo 05/10/2012, 15:42
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: Problema con sesiones en codeigniter

Activa los logs
$config['log_threshold'] = 4;

Fijate que se guardan en application/logs/

Donde estas creando la session $sesion_data ?

Pon el codigo completo.
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 05/10/2012, 16:09
 
Fecha de Ingreso: febrero-2011
Ubicación: quito
Mensajes: 19
Antigüedad: 13 años, 3 meses
Puntos: 0
Información Respuesta: Problema con sesiones en codeigniter

Cita:
Iniciado por NUCKLEAR Ver Mensaje
Activa los logs
$config['log_threshold'] = 4;

Fijate que se guardan en application/logs/

Donde estas creando la session $sesion_data ?

Pon el codigo completo.
Este el el codigo del login

Código PHP:

<?php

class Login extends CI_Controller{
    
//variables que contienen la pagina y la estructura de la misma a
    //asi como tambien lleban el control de la seguridad
    
private static $Data_ = array();
    private 
$SessionUser_;
    private 
$SessionPass_;
    private 
$SessionId_;
    private 
$Pagina_ ;

    
/**
    * Funcion constructora
    */
    
public function __construct(){
                
parent::__construct();    
                
$this->load->library('session')    ;
        }

    
/**
    * Carga datos principales de la pagina como titulo 
    * y foco en los menus
    */    
    
private function informacion(){
        
self::$Data_['titulo'] = 'Identfíquese...';    
        
self::$Data_['ok'] = '<div class="hero-unit container">Bienvendido, Si no puede ingresar Click 
                        <a class="btn btn-info"href="'
.    base_url() . 'index.php/clientes">Aquí</a></div>';
    }        

    
/**
    * Pagina principal de la clase
    */
    
public function index(){    
        
//destruimos posibles datos de session 
        
$this->session->sess_destroy();
        
//construimos informacion inportante
        
$this->informacion();

        
$this->Pagina_ $this->load->view('v_acabecera',self::$Data_,true);
        
$this->Pagina_ $this->Pagina_ $this->load->view('v_login','',true);
        
$this->Pagina_ $this->Pagina_ $this->load->view('v_fpie','',true);
        print 
$this->Pagina_;

    }
    
/**
    * Validamos los datos del usuario contra la base de datos
    */
    
public function identificar(){        
        
//construimos informacion inportante
        
$this->informacion();

        
$usuario;
        
$pass;

        
$this->SessionUser_ $this->input->post('usuario');
        
$this->SessionPass_ $this->input->post('pass');
        
$usuarios $this->db->get('usuarios');

        foreach (
$usuarios->result() as $key) {
             
$usuario =  $key->Usuario;
            
$pass $key->Pass;
        }
        
//caso en el que el usuario y la contraseña coinciden
        
if (($usuario == $this->SessionUser_)&&($pass == $this->SessionPass_)):

            
$sesion_data = array(
                                
'user' => $usuario,
                                
'estado' => 'loged'
                                
);
            
$this->session->set_userdata($sesion_data);

            
$this->Pagina_ $this->load->view('v_acabecera',self::$Data_);
            print (
self::$Data_['ok']);
            
$this->Pagina_ $this->Pagina_ $this->load->view('v_fpie','');    
            
        
//cuando no coincide el usuario y/o la contraseña
        
else:                    
            
self::$Data_['error'] = '<div class="alert"> Lo Siento El <b>Usuario</b> o La <b>Contraseña</b> 
                                    No Coinciden, Intentelo Nuevamente...</div>'
;    
            
$this->Pagina_ $this->load->view('v_acabecera',self::$Data_,true);
            
$this->Pagina_ $this->Pagina_ $this->load->view('v_login',self::$Data_,true);
            
$this->Pagina_ $this->Pagina_ $this->load->view('v_fpie','',true);            
        print 
$this->Pagina_;
        endif;
    }
    
    public function 
salir(){
        
$this->index();
    }
}

y de esta manera uso los datos

Código PHP:

class Clientes extends CI_Controller{    
    private 
$Pagina_;
    private 
$CatalogoVistas_;
    private 
$Tabla_ 'clientes';
    private 
$Config_;
    private 
$Limit_;    
    private 
$Offset_ 50;


    public function 
__construct(){
        
parent::__construct();        
        
$this->load->library('session')    ;
        
$this->load->model('m_basedatos');
        
$this->load->library('pagination');
        
$this->load->library('form_validation');
    }


    private function 
contenidos(){
        
$this->CatalogoVistas_ = array(
                                    
'v_acabecera' => array('titulo' => 'Clientes'),
                                    
'v_bmenu' => array('titulo' => 'Clietes Cendendt')                                    
                                    );
        return 
$this->CatalogoVistas_;
    }

var_dump($this->session->all_userdata()); 
y eso solo me devuelve losvalores por defecto y no los que yo igresé.

Estaba checando los Logs y dejé un resumen de lo que me parece es lo mas importante esto es en lavisita de cuatro paginas las dos primeras son el mismo controlador y las dos ultimas son de dos controladores diferentes


DEBUG - 2012-10-05 22:06:23 --> Global POST and COOKIE data sanitized
DEBUG - 2012-10-05 22:06:23 --> Config file loaded: application/config/config.php
DEBUG - 2012-10-05 22:06:23 --> Session Class Initialized
DEBUG - 2012-10-05 22:06:24 --> File loaded: application/views/v_login.php
DEBUG - 2012-10-05 22:06:24 --> Final output sent to browser
DEBUG - 2012-10-05 22:06:24 --> Total execution time: 0.2434


DEBUG - 2012-10-05 22:06:27 --> Global POST and COOKIE data sanitized
DEBUG - 2012-10-05 22:06:27 --> Config file loaded: application/config/config.php
DEBUG - 2012-10-05 22:06:27 --> Session Class Initialized
DEBUG - 2012-10-05 22:06:27 --> A session cookie was not found.
DEBUG - 2012-10-05 22:06:27 --> Session routines successfully run
DEBUG - 2012-10-05 22:06:27 --> Final output sent to browser
DEBUG - 2012-10-05 22:06:27 --> Total execution time: 0.2088

DEBUG - 2012-10-05 22:06:28 --> Global POST and COOKIE data sanitized
DEBUG - 2012-10-05 22:06:28 --> Session Class Initialized
DEBUG - 2012-10-05 22:06:28 --> Helper loaded: string_helper
DEBUG - 2012-10-05 22:06:28 --> A session cookie was not found.
DEBUG - 2012-10-05 22:06:29 --> Session routines successfully run
DEBUG - 2012-10-05 22:06:29 --> Final output sent to browser
DEBUG - 2012-10-05 22:06:29 --> Total execution time: 0.2104

DEBUG - 2012-10-05 22:06:30 --> Global POST and COOKIE data sanitized
DEBUG - 2012-10-05 22:06:30 --> Session Class Initialized
DEBUG - 2012-10-05 22:06:30 --> Helper loaded: string_helper
DEBUG - 2012-10-05 22:06:30 --> A session cookie was not found.
DEBUG - 2012-10-05 22:06:30 --> Session routines successfully run
DEBUG - 2012-10-05 22:06:30 --> Final output sent to browser
DEBUG - 2012-10-05 22:06:30 --> Total execution time: 0.2479


Veo que en todas me dice que no e ha encontrado la cookie "A session cookie was not found"

Última edición por accxell_ax3c; 05/10/2012 a las 16:18 Razón: Compplemento de informacion
  #4 (permalink)  
Antiguo 28/11/2012, 20:44
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema con sesiones en codeigniter

no veo en que lugar haces la instancia de la session ni donde le agregas los datos, cuando invocas la instancia de session en codeigniter automaticamente te crea algunos valors por defecto como session_id, ip_address etc despues con la la funcion

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

agregas tus propios valores

Saludos
  #5 (permalink)  
Antiguo 05/02/2014, 07:57
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Problema con sesiones en codeigniter

Cita:
Iniciado por shaserUsa Ver Mensaje
no veo en que lugar haces la instancia de la session ni donde le agregas los datos, cuando invocas la instancia de session en codeigniter automaticamente te crea algunos valors por defecto como session_id, ip_address etc despues con la la funcion

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

agregas tus propios valores

Saludos


... ya lo esta hace en:

Código PHP:

$sesion_data 
= array(
                                
'user' => $usuario,
                                
'estado' => 'loged'
                                
);
            
$this->session->set_userdata($sesion_data);

            
$this->Pagina_ $this->load->view('v_acabecera',self::$Data_); 
yo tambien tengo el mismo problema, pero con un hosting externo, con servidores propios y en localhost no me pasa, y es exactamente el mismo codigo
  #6 (permalink)  
Antiguo 05/02/2014, 18:39
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: Problema con sesiones en codeigniter

Código PHP:
Ver original
  1. $this->informacion();
  2.  
  3.         $usuario;
  4.         $pass;
  5.  
  6.         $this->SessionUser_ = $this->input->post('usuario');
  7.         $this->SessionPass_ = $this->input->post('pass');
  8.         $usuarios = $this->db->get('usuarios');
  9.  
  10.         foreach ($usuarios->result() as $key) {
  11.              $usuario =  $key->Usuario;
  12.             $pass = $key->Pass;
  13.         }
  14.         //caso en el que el usuario y la contraseña coinciden
  15.         if (($usuario == $this->SessionUser_)&&($pass == $this->SessionPass_)):

Pues es simple ese if jamas se cumple, nunca te agrega nada a la session.

Deberías tener una funcion en el modelo que le envias usuario y pass y te devuelve un boolean. Lo que haces de pedir todos los usuarios de la tabla usuario es muy pero muy feo, y si igualmente quieres seguir haciendolo de ese modo, esa comparación debería estar dentro del foreach. Pero que para loguear un usuario haya que devolver TODA la tabla usuarios completa francamente nunca lo he visto.

Saludos

Etiquetas: Ninguno
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 20:11.