<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>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).<div><br></div><div>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..</div><div><div>Por que no seria confiable este metodo??</div><div><br></div><div>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:</div><div><div><br></div><div><div>auth.php: </div><div><?php</div><div><span style="font-size: 12pt;">session_start();</span></div><div><br></div><div>$user = "";</div><div>$pass = "";</div><div><br></div><div>if(isset($_SESSION["user"]) && isset($_SESSION["pass"]) ) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$user = $_SESSION["user"];</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$pass = $_SESSION["pass"];</div><div>}</div><div><br></div><div>/* --- Esta parte comentada es la que paso al redirect.php ---</div><div>if(isset($_POST["user"]) && isset($_POST["pass"]) ) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$user = $_POST["user"];</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$pass = $_POST["pass"];</div><div>}</div><div>*/</div><div><br></div><div>if($user != "" && $pass != "") {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$account='';</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// recupero los datos asociados al user:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$sql = "SELECT id,pass,adm</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>FROM investigadores </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>WHERE est=1 AND user=?";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if (!(@$stmt = mysqli_prepare($dbh, $sql))) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>header("Location: ".$subdir."../login.php?m=1");</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if (!(@mysqli_stmt_bind_param($stmt, "s", $user))) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>header("Location: ".$subdir."../login.php?m=1");</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if (!(@mysqli_stmt_execute($stmt))) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>header("Location: ".$subdir."../login.php?m=1");</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if (!(@mysqli_stmt_bind_result($stmt, $id, $hash, $adm))) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>header("Location: ".$subdir."../login.php?m=1");</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// numero de resultados:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>@mysqli_stmt_store_result($stmt);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>@$total = mysqli_stmt_num_rows($stmt);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// si el user existe, verifico el passwd:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if($total === 1) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// recupero id de cuenta y perfil:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>@mysqli_stmt_fetch($stmt);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if (@validar_pass($dbh, $hash, $pass)) { // hashea el passwd ingresado y compara.</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// si se verifica el passwd se asigna el nivel de acceso correspondiente:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["user"] = $user;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["pass"] = $pass;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["perfil"] = ($adm)? 5 : 1; </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["id"] = $account;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>@mysqli_stmt_close($stmt);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// si el passwd es incorrecto, vuelvo al formulario de ingreso:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["user"] = "";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["pass"] = "";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["perfil"] = -1;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["id"] = -1;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>@mysqli_stmt_close($stmt);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>header("Location: ".$subdir."../login.php?m=3");</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// si el user no existe, redirijo al form:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["user"] = "";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["pass"] = "";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["perfil"] = -1;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["id"] = -1;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>header("Location: ".$subdir."../login.php?m=2");</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br></div><div>// sin user voy al form:<span class="Apple-tab-span" style="white-space:pre"> </span></div><div>} else {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["user"] = "";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["pass"] = "";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["perfil"] = -1;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>$_SESSION["id"] = -1;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>header("Location: ".$subdir."../login.php?m=4");</div><div>}</div></div></div><div><br></div><div><br></div><div>Gracias por la ayuda!! Saludos</div><div><div><br><br><div>> From: leonardot@pegasusnet.com.ar<br>> To: php-avanzado@pato2.fi.mdp.edu.ar<br>> Date: Tue, 11 Nov 2014 13:58:16 -0300<br>> Subject: Re: [Php-avanzado] Consulta Sesiones<br>> <br>> Hola Gabriel,<br>> <br>> el ir "atrás" en el navegador hace lo mismo que recargar la página con<br>> F5. La forma de loguearte y lo que hacés cuando no es correcto el login<br>> deberían determinar esto.<br>> <br>> En el único caso admisible de seguir logueado al recargar, es<br>> justamente en la pantalla de inicio del sistema, ya que un F5 vuelve a<br>> enviar los datos que se pusieron en los INPUT para ingresar.<br>> <br>> En todos los demás casos, ya sea "atrás" o F5, deberías seguir logueado<br>> o deslogueado según corresponda y no cambiar de un estado a otro.<br>> <br>> Saludos!<br>> <br>> <br>> <br>> El mar, 11-11-2014 a las 12:41 -0300, Gabriel Lenti escribió:<br>> > Leo, gracias por la rpta!<br>> > <br>> > <br>> > El problema en si no era al ir para 'atras' nomas, sino cuando dp de<br>> > ir para atras apretaba F5 y se reenviaba el formulario (algo asi como<br>> > un double submit). Eso es lo que estoy tratando de evitar. Tendria<br>> > algo que ver cuantos 'atras' pueda hacer en este caso?<br>> > <br>> > <br>> > Saludos!!<br>> > <br>> > <br>> > > From: leonardot@pegasusnet.com.ar<br>> > > To: php-avanzado@pato2.fi.mdp.edu.ar<br>> > > Date: Mon, 10 Nov 2014 18:35:11 -0300<br>> > > Subject: Re: [Php-avanzado] Consulta Sesiones<br>> > > <br>> > > Hola Gabriel,<br>> > > <br>> > > lo del redirector intermedio puede funcionar, o no, dependiendo de<br>> > > cuantos "atrás" puedas hacer con el navegador, lo que hace que este<br>> > > método no sea confiable.<br>> > > <br>> > > Lo que no estás mostrando en el funcionamiento de la función<br>> > validar()<br>> > > es qué pasa cuando el usuario no es válido... ahí debe estar el<br>> > problema<br>> > > de implementación.<br>> > > <br>> > > Saludos!<br>> > > <br>> > > <br>> > > El lun, 10-11-2014 a las 16:11 -0300, Gabriel Lenti escribió:<br>> > > > Hola gente! Ya que anda en el aire el tema de las sesiones tengo<br>> > una<br>> > > > consulta al respecto justamente.<br>> > > > Estaba teniendo problemas con el reenvio del form de logueo. Es<br>> > decir,<br>> > > > si me deslogueaba e inmediatamente presionaba 'back' y 'reload' en<br>> > el<br>> > > > explorador, me volvia a loguear sin preguntar nada, lo cual<br>> > parecia no<br>> > > > estar muy bien desde el punto de vista de la seguridad, jeje. El<br>> > > > codigo resumido seria:<br>> > > > <br>> > > > <br>> > > > form.php:<br>> > > > <form action="page1.php" method="POST"><br>> > > > <input type="text" name="user"/><br /><br>> > > > <input type="password" name="pass" /><br>> > > > <input type="submit" name="submit" value="Ingresar" /><br>> > > > </form><br>> > > > <br>> > > > <br>> > > > page1.php:<br>> > > > session_start();<br>> > > > $user = "";<br>> > > > $pass = "";<br>> > > > if(isset($_SESSION["user"]) && isset($_SESSION["pass"]) ) {<br>> > > > $user = $_SESSION["user"];<br>> > > > $pass = $_SESSION["pass"];<br>> > > > }<br>> > > > if(isset($_POST["user"]) && isset($_POST["pass"]) ) {<br>> > > > $user = $_POST["user"];<br>> > > > $pass = $_POST["pass"];<br>> > > > }<br>> > > > $valid = validar($user, $pass);<br>> > > > if (!$valid) header("Location: index.php");<br>> > > > <br>> > > > <br>> > > > Leyendo por ahi encontre que este tipo de problemas se pueden<br>> > > > solucionar con una redireccion intermedia, es asi? Por ejemplo, si<br>> > la<br>> > > > secuencia fuera: form.php -> redirect.php -> page1.php, donde:<br>> > > > <br>> > > > <br>> > > > redirect.php:<br>> > > > <br>> > > > <br>> > > > session_start();<br>> > > > $user = "";<br>> > > > $pass = "";<br>> > > > if(isset($_POST["user"]) && isset($_POST["pass"]) ) {<br>> > > > $_SESSION["user"] = $_POST["user"];<br>> > > > $_SESSION["pass"] = $_POST["pass"];<br>> > > > header("Location: page1.php");<br>> > > > }<br>> > > > <br>> > > > <br>> > > > Probandolo asi parece funcionar, pero me quede lleno de dudas..<br>> > > > Alcanzaria con esto para resolver el problema? Hay algo mas que<br>> > tenga<br>> > > > que considerar para evitar complicaciones al loguear usuarios?<br>> > > > Desde ya muchas gracias!!<br>> > > > <br>> > > > <br>> > > > Gabriel Lenti<br>> > > > <br>> > > > <br>> > > > _______________________________________________<br>> > > > Lista de correo: Php-avanzado<br>> > > > Mensajes a la lista: Php-avanzado@pato2.fi.mdp.edu.ar<br>> > > > Administración Web:<br>> > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado<br>> > > > Desubscripción:<br>> > php-avanzado-request@pato2.fi.mdp.edu.ar?subject=unsubscribe<br>> > > <br>> > > -- <br>> > > Leonardo Tadei<br>> > > leonardot@pegasusnet.com.ar<br>> > > Web: http://leonardo.tadei.com.ar<br>> > > Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key<br>> > > <br>> > > _______________________________________________<br>> > > Lista de correo: Php-avanzado<br>> > > Mensajes a la lista: Php-avanzado@pato2.fi.mdp.edu.ar<br>> > > Administración Web:<br>> > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado<br>> > > Desubscripción:<br>> > php-avanzado-request@pato2.fi.mdp.edu.ar?subject=unsubscribe<br>> > <br>> > _______________________________________________<br>> > Lista de correo: Php-avanzado<br>> > Mensajes a la lista: Php-avanzado@pato2.fi.mdp.edu.ar<br>> > Administración Web: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado<br>> > Desubscripción: php-avanzado-request@pato2.fi.mdp.edu.ar?subject=unsubscribe<br>> <br>> -- <br>> Leonardo Tadei<br>> leonardot@pegasusnet.com.ar<br>> Web: http://leonardo.tadei.com.ar<br>> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key<br>> <br>> _______________________________________________<br>> Lista de correo: Php-avanzado<br>> Mensajes a la lista: Php-avanzado@pato2.fi.mdp.edu.ar<br>> Administración Web: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado<br>> Desubscripción: php-avanzado-request@pato2.fi.mdp.edu.ar?subject=unsubscribe<br></div></div></div></div> </div></body>
</html>