manda de nuevo los post del formulario al ir atras en el navegador y actualizar

Iniciado por Ethgar, 10 Marzo 2015, 17:39 PM

0 Miembros y 1 Visitante están viendo este tema.

Ethgar

Que tal, buenos días, me tope con un problema, tengo un login en una aplicación y se logea correctamente y cuando hago el logout también, borra la sesión, el problema es que cuando hago el logout y vuelvo a la pagina anterior me aparecen los datos del usuario logeado, y al refrescar la pagina me aparece que si deseo confirmar el envío de los datos del formulario, lo que hace que se vuelva a logear. de que manera podria controlar este problema?

Usuario Invitado

No sé mucho de PHP, pero ¿porqué no pones en tu controlador frontal que se redirija a login.php cuando no haya sesión?

Código (php) [Seleccionar]
<?php 
      
if(!isset($_SESSION['logged_in']))
          
header("Location: login.php");
?>


Y en el logout, remueves la sesión y la destruyes:

Código (php) [Seleccionar]
<?php
      
unset($_SESSION['logged_in']);  
      
session_destroy();  
?>
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

MinusFour


Ethgar

MinusFour  estoy utilizando la clase session de CodeIgniter, Gus Garsaky  la session si la destruyo en un controlador llamado logout que me lleva a el login, el problema es que cuand hago logout si me manda al login pero si yo voy a atrás en el navegador puedo llegar a una pagina en la que estuve logeado, y si refresco la pagina manda los datos del formulario , intente destruir las variables post pero aun así lo vuelve a mandar

MinusFour

Cita de: Ethgar en 10 Marzo 2015, 18:37 PM
MinusFour  estoy utilizando la clase session de CodeIgniter, Gus Garsaky  la session si la destruyo en un controlador llamado logout que me lleva a el login, el problema es que cuand hago logout si me manda al login pero si yo voy a atrás en el navegador puedo llegar a una pagina en la que estuve logeado, y si refresco la pagina manda los datos del formulario , intente destruir las variables post pero aun así lo vuelve a mandar

¿No puedes poner tu código? Si estas destruyendo la sesion propiamente entonces no deberia llevar acabo la funcion normal del script, porque el dato de la sesion no existe.

Ethgar

Este es el formulario de login:



echo form_open('main/login',$form_login);
echo form_label('usuario','usuario');
echo form_input($campo1);
echo form_label('password','password');
echo form_input($campo2);
echo '<br>'.form_input($enviar);
echo form_close();


Este es mi controlador login

public function login(){
$usuario = $this->input->post('usuario', TRUE);
$password = $this->input->post('password', TRUE); 
$data['res'] = $this->usuarios_model->verTodo();
$this->usuarios_model->login($usuario,$password);
$this->load->view('header',$data);
$this->load->view('verdata');
$this->load->view('footer');
}


Y este mi controlador logout

public function logout(){
$form_login['form_login'] = array(
'name' => 'login',
'id' => 'login',
'rol' => 'form'
);
$this->session->sess_destroy();
$data['res'] = $this->usuarios_model->verTodo();
$this->load->view('header',$data);
$this->load->view('login',$form_login);
$this->load->view('footer');
}

MinusFour

Cita de: Ethgar en 10 Marzo 2015, 19:48 PM
Este es el formulario de login:



echo form_open('main/login',$form_login);
echo form_label('usuario','usuario');
echo form_input($campo1);
echo form_label('password','password');
echo form_input($campo2);
echo '<br>'.form_input($enviar);
echo form_close();


Este es mi controlador login

public function login(){
$usuario = $this->input->post('usuario', TRUE);
$password = $this->input->post('password', TRUE); 
$data['res'] = $this->usuarios_model->verTodo();
$this->usuarios_model->login($usuario,$password);
$this->load->view('header',$data);
$this->load->view('verdata');
$this->load->view('footer');
}


Y este mi controlador logout

public function logout(){
$form_login['form_login'] = array(
'name' => 'login',
'id' => 'login',
'rol' => 'form'
);
$this->session->sess_destroy();
$data['res'] = $this->usuarios_model->verTodo();
$this->load->view('header',$data);
$this->load->view('login',$form_login);
$this->load->view('footer');
}


No uso CodeIgniter pero no veo en ningun lugar que estes agregando informacion acerca de la sesion, por lo que cuando destruyes la sesion no debe tener ninguna informacion relevante. ¿CodeIgniter no tiene modulos para manejar la autentificacion?

Ethgar

La agrego en el modelo cuando hace la consulta:

public function login($usuario,$password){//
$this->db->where('USUARIO',$usuario);
$this->db->from('usuarios');
$consulta = $this->db->get();
if ($consulta->num_rows > 0) {
$this->db->where('PASSWORD',$password);
$this->db->from('usuarios');
$consulta1 = $this->db->get();
if ($consulta1->num_rows > 0) {
$consulta = $consulta->row();
$data = array(
'NOMBRE' => $consulta->NOMBRE,
'APELLIDOS' => $consulta->APELLIDOS,
'USUARIO' => $consulta->USUARIO,
'TIPO_USUARIO' => $consulta->TIPO_USUARIO
);
$this->session->set_userdata($data);
}else{
$this->session->set_flashdata('Mensaje:',"Contraseña incorrecta");
$this->session->keep_set_flashdata('Mensaje:',"Contraseña incorrecta");
}

}else{
$this->session->set_flashdata('Mensaje:',"usuario incorrecto");
}

}


MinusFour

Bueno entonces creo que tiene que ver con la forma en que tu navegador envia la peticion HTTP. Estoy leyendo la especificacion de CodeIgniter y ellos no manejan sesiones de PHP, tienen su propia implementacion basada en cookies, la cual parece ser que es simplemente una serializacion de un arreglo que es guardado en la cookie en si y no del lado del servidor (a menos que uses una base de datos para las sesiones).

No tengo idea si hacen control de las session_ids, pero es posible que estes enviando la cookie de nuevo (con todos los valores asociados) y CodeIgniter no haga un control propio sobre las ids. ¿Estas utilizando el contenido de estas sesiones en cada uno de los controladores? Por ejemplo, en las paginas que vuelves a reenviar la informacion POST y ves toda la informacion del usuario una vez deslogueado.... usas:

Código (php) [Seleccionar]

$this->session->userdata('USUARIO');

Ethgar

Así es, lamo el array de sesiones para verificar si hay uno logueado, tienes razón en que al regresar la pagina vuelve el array de la cokie, creo que debo enfocarme por ese lado, gracias por tus respuestas, en cuanto quede resuelto publico la solución, saludos!!!