[Php-avanzado] Consulta Sesiones

Gabriel Lenti gablenti en hotmail.com
Dom Nov 16 19:10:54 ART 2014


Ah bien, mi confusion venia porque al ir para el browser no reenviaba directamente y me saltaba un cartel pidiendo confirmacion (o sea q apretara F5). Esto solo me sucedia al volver para atras hasta la pagina de login solamente. Ahi era cuando me volvia a loguear si habia cerrado la sesion (porq se reenviaban los datos del form de login).
Por lo que estuve probando parece haberse solucionado con la redireccion (no he vuelto a ver cartel de reenvio alguno). Sigo sin ver de que manera afecta la cantidad de 'atras' que pueda hacer en este caso..Por que no seria confiable este metodo??
El codigo de autenticacion es similar a lo que vimos en el curso. Es un script que se incluye al principio de todas las paginas restirindas:
auth.php:  <?phpsession_start();
$user = "";$pass = "";
if(isset($_SESSION["user"]) && isset($_SESSION["pass"]) ) {	$user = $_SESSION["user"];	$pass = $_SESSION["pass"];}
/*   --- Esta parte comentada es la que paso al redirect.php ---if(isset($_POST["user"]) && isset($_POST["pass"]) ) {	$user = $_POST["user"];	$pass = $_POST["pass"];}*/
if($user != "" && $pass != "") {	$account='';		// recupero los datos asociados al user:	$sql = "SELECT id,pass,adm			FROM investigadores 			WHERE est=1 AND user=?";		if (!(@$stmt = mysqli_prepare($dbh, $sql))) {		header("Location: ".$subdir."../login.php?m=1");	}	if (!(@mysqli_stmt_bind_param($stmt, "s", $user))) {		header("Location: ".$subdir."../login.php?m=1");	}	if (!(@mysqli_stmt_execute($stmt))) {		header("Location: ".$subdir."../login.php?m=1");	}	if (!(@mysqli_stmt_bind_result($stmt, $id, $hash, $adm))) {		header("Location: ".$subdir."../login.php?m=1");	}	// numero de resultados:	@mysqli_stmt_store_result($stmt);	@$total = mysqli_stmt_num_rows($stmt);
	// si el user existe, verifico el passwd:	if($total === 1) {		// recupero id de cuenta y perfil:		@mysqli_stmt_fetch($stmt);
		if (@validar_pass($dbh, $hash, $pass)) { // hashea el passwd ingresado y compara.			// si se verifica el passwd se asigna el nivel de acceso correspondiente:			$_SESSION["user"] = $user;			$_SESSION["pass"] = $pass;			$_SESSION["perfil"] = ($adm)? 5 : 1; 			$_SESSION["id"] = $account;			@mysqli_stmt_close($stmt);
		} else {			// si el passwd es incorrecto, vuelvo al formulario de ingreso:			$_SESSION["user"] = "";			$_SESSION["pass"] = "";			$_SESSION["perfil"] = -1;			$_SESSION["id"] = -1;			@mysqli_stmt_close($stmt);			header("Location: ".$subdir."../login.php?m=3");		}
	// si el user no existe, redirijo al form:	} else {		$_SESSION["user"] = "";		$_SESSION["pass"] = "";		$_SESSION["perfil"] = -1;		$_SESSION["id"] = -1;		header("Location: ".$subdir."../login.php?m=2");	}
// sin user voy al form:	} else {	$_SESSION["user"] = "";	$_SESSION["pass"] = "";	$_SESSION["perfil"] = -1;	$_SESSION["id"] = -1;	header("Location: ".$subdir."../login.php?m=4");}

Gracias por la ayuda!! Saludos

> From: leonardot en pegasusnet.com.ar
> To: php-avanzado en pato2.fi.mdp.edu.ar
> Date: Tue, 11 Nov 2014 13:58:16 -0300
> Subject: Re: [Php-avanzado] Consulta Sesiones
> 
> Hola Gabriel,
> 
> 	el ir "atrás" en el navegador hace lo mismo que recargar la página con
> F5. La forma de loguearte y lo que hacés cuando no es correcto el login
> deberían determinar esto.
> 
> 	En el único caso admisible de seguir logueado al recargar, es
> justamente en la pantalla de inicio del sistema, ya que un F5 vuelve a
> enviar los datos que se pusieron en los INPUT para ingresar.
> 
> 	En todos los demás casos, ya sea "atrás" o F5, deberías seguir logueado
> o deslogueado según corresponda y no cambiar de un estado a otro.
> 
> 	Saludos!
> 
> 
> 
> El mar, 11-11-2014 a las 12:41 -0300, Gabriel Lenti escribió:
> > Leo, gracias por la rpta!
> > 
> > 
> > El problema en si no era al ir para 'atras' nomas, sino cuando dp de
> > ir para atras apretaba F5 y se reenviaba el formulario (algo asi como
> > un double submit). Eso es lo que estoy tratando de evitar. Tendria
> > algo que ver cuantos 'atras' pueda hacer en este caso?
> > 
> > 
> > Saludos!!
> > 
> > 
> > > From: leonardot en pegasusnet.com.ar
> > > To: php-avanzado en pato2.fi.mdp.edu.ar
> > > Date: Mon, 10 Nov 2014 18:35:11 -0300
> > > Subject: Re: [Php-avanzado] Consulta Sesiones
> > > 
> > > Hola Gabriel,
> > > 
> > > lo del redirector intermedio puede funcionar, o no, dependiendo de
> > > cuantos "atrás" puedas hacer con el navegador, lo que hace que este
> > > método no sea confiable.
> > > 
> > > Lo que no estás mostrando en el funcionamiento de la función
> > validar()
> > > es qué pasa cuando el usuario no es válido... ahí debe estar el
> > problema
> > > de implementación.
> > > 
> > > Saludos!
> > > 
> > > 
> > > El lun, 10-11-2014 a las 16:11 -0300, Gabriel Lenti escribió:
> > > > Hola gente! Ya que anda en el aire el tema de las sesiones tengo
> > una
> > > > consulta al respecto justamente.
> > > > Estaba teniendo problemas con el reenvio del form de logueo. Es
> > decir,
> > > > si me deslogueaba e inmediatamente presionaba 'back' y 'reload' en
> > el
> > > > explorador, me volvia a loguear sin preguntar nada, lo cual
> > parecia no
> > > > estar muy bien desde el punto de vista de la seguridad, jeje. El
> > > > codigo resumido seria:
> > > > 
> > > > 
> > > > form.php:
> > > > <form action="page1.php" method="POST">
> > > > <input type="text" name="user"/><br />
> > > > <input type="password" name="pass" />
> > > > <input type="submit" name="submit" value="Ingresar" />
> > > > </form>
> > > > 
> > > > 
> > > > page1.php:
> > > > session_start();
> > > > $user = "";
> > > > $pass = "";
> > > > if(isset($_SESSION["user"]) && isset($_SESSION["pass"]) ) {
> > > > $user = $_SESSION["user"];
> > > > $pass = $_SESSION["pass"];
> > > > }
> > > > if(isset($_POST["user"]) && isset($_POST["pass"]) ) {
> > > > $user = $_POST["user"];
> > > > $pass = $_POST["pass"];
> > > > }
> > > > $valid = validar($user, $pass);
> > > > if (!$valid) header("Location: index.php");
> > > > 
> > > > 
> > > > Leyendo por ahi encontre que este tipo de problemas se pueden
> > > > solucionar con una redireccion intermedia, es asi? Por ejemplo, si
> > la
> > > > secuencia fuera: form.php -> redirect.php -> page1.php, donde:
> > > > 
> > > > 
> > > > redirect.php:
> > > > 
> > > > 
> > > > session_start();
> > > > $user = "";
> > > > $pass = "";
> > > > if(isset($_POST["user"]) && isset($_POST["pass"]) ) {
> > > > $_SESSION["user"] = $_POST["user"];
> > > > $_SESSION["pass"] = $_POST["pass"];
> > > > header("Location: page1.php");
> > > > }
> > > > 
> > > > 
> > > > Probandolo asi parece funcionar, pero me quede lleno de dudas..
> > > > Alcanzaria con esto para resolver el problema? Hay algo mas que
> > tenga
> > > > que considerar para evitar complicaciones al loguear usuarios?
> > > > Desde ya muchas gracias!!
> > > > 
> > > > 
> > > > Gabriel Lenti
> > > > 
> > > > 
> > > > _______________________________________________
> > > > Lista de correo: Php-avanzado
> > > > Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> > > > Administración Web:
> > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> > > > Desubscripción:
> > php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
> > > 
> > > -- 
> > > Leonardo Tadei
> > > leonardot en pegasusnet.com.ar
> > > Web: http://leonardo.tadei.com.ar
> > > Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
> > > 
> > > _______________________________________________
> > > Lista de correo: Php-avanzado
> > > Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> > > Administración Web:
> > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> > > Desubscripción:
> > php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
> > 
> > _______________________________________________
> > Lista de correo: Php-avanzado
> > Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> > Administración Web: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> > Desubscripción: php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
> 
> -- 
> Leonardo Tadei
> leonardot en pegasusnet.com.ar
> Web: http://leonardo.tadei.com.ar
> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
> 
> _______________________________________________
> Lista de correo: Php-avanzado
> Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> Administración Web: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> Desubscripción: php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20141116/07a9ce36/attachment.html>


Más información sobre la lista de distribución Php-avanzado