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

sess_destroy() in Codeigniter

Estas en el tema de sess_destroy() in Codeigniter en el foro de CodeIgniter en Foros del Web. Hola Comunidad.! Tengo un problema en la función (método) que le muestro a continuación. Sucede que yo quiero que los usuarios autenticados puedan cambiar sus ...
  #1 (permalink)  
Antiguo 16/01/2011, 21:17
Avatar de alcide  
Fecha de Ingreso: diciembre-2008
Mensajes: 52
Antigüedad: 15 años, 11 meses
Puntos: 0
Pregunta sess_destroy() in Codeigniter

Hola Comunidad.!
Tengo un problema en la función (método) que le muestro a continuación.
Sucede que yo quiero que los usuarios autenticados puedan cambiar sus datos de usuario en la base de datos es decir (Nombre, email ó clave). Cuando un usuario cambia su nombre, email y no modifica su clave todo marcha bien, se actualizan sus datos y el usuario continúa autenticado. Pero cuando el usuario autenticado cambia la clave Codeigniter me cierra la sessión y el usuario tiene que volver a loguearse con la clave nueva, que creen ustedes que pueda estar ocurriendo.
Me inspiré para realizar mi sistema de autenticación en la clase controlador usuarios y la librería centinela de noquieroprogramar.com
Saludos.
Vista


Código:
//Le paso el Nick por URL del usuario autenticado
//http://localhost/aseguro/index.php/usuarios/chgpw/avali2
function chgpw($nick=""){
      
    if($nick!=""){
   $nick=$this->uri->segment(3);   
      
      $this->load->library('validation');   
   
      
      $reglas['nombre']       ="required|min_length[8]|max_length[50]|xss_clean";
      $reglas['mail']         ="trim|required|valid_email";   
      $reglas['newclave']      ="trim|required|min_length[4]|max_length[12]|matches[r_clave]";
      $reglas['r_clave']      ="trim|required";
      $reglas['oldclave']      ="trim|required|min_length[4]|max_length[12]|callback__check_oldclave";

         
      $this->validation->set_rules($reglas);
      
      $campos['nombre']       ="<b>Nombre y Apellidos</b>";       
      $campos['mail']         ="<b>Correo Electr&oacute;nico</b>";
      $campos['oldclave']      ="<b>Contrase&ntilde;a actual</b>";   
      $campos['newclave']      ="<b>Contrase&ntilde;a nueva</b>";
      $campos['r_clave']      ="<b>Repetir Contrase&ntilde;a</b>";
      
      $this->validation->set_fields($campos);            
      
      
      $this->validation->set_error_delimiters('<em>', '</em>');
      
      if(!$this->validation->run())
      {
   $this->db->where('nick', $nick);
   $q = $this->db->get('usuarios');
   $data['query']=$q;
         $this->load->view("cabecera");
         $this->load->view('usuarios/chgpw',$data);   
         $this->load->view("pie");
      }
      
      else
      
      {
         
$nombre=$this->input->post('nombre');
$newclave=sha1($this->input->post('newclave'));
$mail=$this->input->post('mail');      
      
         $update = array(
               'nombre' => $nombre,
               'clave' => $newclave,
               'mail' => $mail
               
            );
       
$this->db->where('nick', $nick);
$this->db->update('usuarios', $update);
redirect('usuarios/index/update_ok');
               
      }
      
         
   
   }
else {
         
         $this->load->view("cabecera");
         $this->load->view("usuarios/error");
         $this->load->view("pie");
      }            
   
      
}
  #2 (permalink)  
Antiguo 17/01/2011, 03:19
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años
Puntos: 890
Respuesta: sess_destroy() in Codeigniter

El "problema" es que esta constantemente con cada carga haciendo una consulta a la bd.
Aunque lo normal es que se guarde todo en una session de una vez y no haga la consulta en cada carga. Y tambien lo normal es que si cambia el password, te lo vuelva a pedir(es bastante logico)
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 17/01/2011, 14:02
Avatar de alcide  
Fecha de Ingreso: diciembre-2008
Mensajes: 52
Antigüedad: 15 años, 11 meses
Puntos: 0
De acuerdo Respuesta: sess_destroy() in Codeigniter

Hola NUCKLEAR
Gracias por la aclaración..

El problema era el siguiente cuando el usuario que estaba logueado actualizaba la contraseña en la base de datos, el método login comprobaba si la contraseña existente en la base de datos era igual a la de la session y al ser diferentes destruía la session.
así que hice lo siguiente.

$nombre=$this->input->post('nombre');
$newclave=sha1($this->input->post('newclave'));
$mail=$this->input->post('mail');

$update = array(
'nombre' => $nombre,
'clave' => $newclave,
'mail' => $mail

);

$this->db->where('nick', $nick);
$this->db->update('usuarios', $update);
Código:
$this->session->set_userdata('clave', $newclave);
$centinela=new Centinela();
$centinela->_clave = $newclave;
redirect('usuarios/index/chgpw_ok');

}
y todo funciona correctamente

gracias

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 11:04.