Foros del Web » Programando para Internet » PHP »

Problema con login y cookies

Estas en el tema de Problema con login y cookies en el foro de PHP en Foros del Web. Saludos a todos, llevo un tiempo leyendo el foro y empapándome de información pero nunca me había decidido a escribir ya que en general he ...
  #1 (permalink)  
Antiguo 13/01/2009, 13:27
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 10 meses
Puntos: 11
Problema con login y cookies

Saludos a todos, llevo un tiempo leyendo el foro y empapándome de información pero nunca me había decidido a escribir ya que en general he podido encontrar solución a mis dudas a base de buscar. El problema es que para este caso no he encontrado nada similar a mi problema.

Tengo una página de login que tiene los datos almacenados en una base de datos. Accede perfectamente a la zona "privada", pero el problema es que no funciona a la primera, si no que hay que recargar la página para que se pueda entrar con éxito. He comprobado las cookies y todo el proceso se realiza correctamente. No obstante la primera vez carga hasta el if(isset($_COOKIE[...]) y no lo toma como válido, a pesar de que la cookie se ha creado correctamente y la variable tiene el valor apropiado.

Os adjunto el código (bastante simple) para que podáis echarle un vistazo a ver si alguien descubre que puede estar pasando.

Un saludo y enhorabuena por el foro!

Código PHP:
<?php

    $surname
=$_POST["surname"];
    
$password=$_POST["password"];
    if(isset(
$surname) && isset($password)){
        
$conexion=mysql_connect("localhost","user","password");
        
$sql="select persons.surname, officers.password from persons, officers where persons.surname='$surname' and persons.pid=officers.pid";
        
$result=mysql_db_query("elections_db",$sql);
        
$fila=mysql_fetch_array($result);
        if(
$fila["password"]==$password && $fila["surname"]==$surname){
            
$uid=$surname;
            
setcookie('uid'$uidtime() + 14400'/');
            echo 
"
            
            <html xmlns=\"http://www.w3.org/1999/xhtml\">
            <head>
            <title>Ufficio Elettorale</title></head>
            <body>
            <h2>Ufficio Elettorale</h2>"
;

// La primera vez que me logeo solo carga hasta aqui, una vez pulso F5 carga correctamente a pesar de que la cookie existe y la variable uid se ha creado dentro de ella

            
if (isset($_COOKIE['uid']) && $_COOKIE['uid']){
                echo 
"You are logged in as: ".$_COOKIE['uid']."<br/>
            <ol>
            <li>Anagrafe persone
             <ul>
              <li>Elenca persone</li>

                  <li><a href=\"anagrafe-aggiungi.php\">Aggiungi persona</a></li>
                  <li><a href=\"anagrafe-cancella.php\">Cancella persona</a></li>
                  <li><a href=\"anagrafe-modifica.php\">Modifica persona</a></li>
             </ul></li>
            <li>Aggiornamento elenco dei candidati
             <ul>
              <li>Elenca candidato</li>
              <li>Aggiungi candidato</li>

              <li>Cancella candidato</li>
             </ul></li>
            <li>Aggiornamento elenco degli elettori
             <ul>
              <li>Elenca elettore</li>
               <li>Aggiungi elettore</li>
              <li>Cancella elettore</li>
             </ul></li>

            <li><a href=\"start_election.php\">Inizio votazione</a></li>
            <li><a href=\"close_election.php\">Chiusura votazione</a></li>
            <li>Pubblicazione risultati</li>
            </ol>
            <a href=\"logout.php\">Log out</a><br />"
;
            }
        }
        
    
    }
    else{
?>
<h2>Ufficio Elettorale</h2>
You are not logged in.<br />
<form method="post" action="ufficio-elettorale.php">
<table>
<tr><td>Cognome (maiuscolo):</td>

<td><input type="text" name="surname"></input></td></tr>
<tr><td>Password:</td>
<td><input type="password" name="password"></input></td></tr>
<tr><td colspan="2" align="center">
<input type="submit" value="Log in"></input></td></tr>
</table></form>
<?php
    
}
?>
</body>
</html>
  #2 (permalink)  
Antiguo 13/01/2009, 13:42
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con login y cookies

No es correcto establecer una cookie y leerla en el mismo script, el proceso es:

1- Verificas la info de $_POST
2- Creas la cookie y redireccionas a otra pagina
3- En todas las paginas protegidas de tu sitio lees la cookie, validas la info con la base de datos y continuas el proceso.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 13/01/2009, 13:45
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Problema con login y cookies

Muchas gracias por tu respuesta tan rápida!

Ya había leído en algún libro que después de generar la cookie se suele redireccionar a una pagina (en plan index.php o algo similar). El caso es que intente "plagiar" este sistema de un script que enseñó el profesor en clase aunque con bastante poco éxito. Al parecer el tenia creado todo dentro de un mismo script pero seguramente me he perdido algún paso.

Voy a probar y comento a ver que tal.
Gracias de nuevo y un saludo!
  #4 (permalink)  
Antiguo 13/01/2009, 13:47
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Problema con login y cookies

Revisa esta linea:

Código PHP:
if (isset($_COOKIE['uid']) && $_COOKIE['uid']) 
¿Porque pones && $_COOKIE['uid']? Seguro te falto algo.
  #5 (permalink)  
Antiguo 13/01/2009, 13:58
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Problema con login y cookies

Cita:
Iniciado por Ronruby Ver Mensaje
¿Porque pones && $_COOKIE['uid']? Seguro te falto algo.
Lo había sacado de un libro, aunque a mi también me parece un poco redundante ya que en teoría si la expresión es if($_COOKIE['uid']) viene a ser lo mismo que if(isset($_COOKIE['uid'])) por lo que una de las dos condiciones se podría suprimir, ¿no?

La otra posibilidad sería que el libro estuviese mal (cosa que no sería de extrañar ya que lo he visto muchas veces).
  #6 (permalink)  
Antiguo 13/01/2009, 13:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con login y cookies

Ronruby, ciertamente no es correcto hacer if sobre variables sin incluir una comparacion, sin embargo, es un una mala practica porque normalmente se obtiene verdadero cuando la variable tiene un valor diferente de cero, false, null o empty()... curiosidades de PHP

Edito:

miwelillo, si en esa variable esperas un valor numerico, lo correcto seria:

Código PHP:
if (isset($_COOKIE['uid']) && intval($_COOKIE['uid']) > 0
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 13/01/2009 a las 14:01 Razón: Error de dedo
  #7 (permalink)  
Antiguo 13/01/2009, 14:08
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Problema con login y cookies

Gracias por tu aclaración Triby, en realidad no espero ningún valor numérico, simplemente el nombre del usuario. Como ves, es un sistema de login bastante estúpido para aprender un poco como funciona el tema de las cookies.

Actualmente he separado el código en dos ficheros diferentes como me has comentado y ya funciona todo correctamente. Ahora solo me queda investigar un poco más sobre los sistemas mas seguros a implementar por si algún día me toca aplicar esto a la vida real!

Gracias de nuevo a todos por la ayuda!
  #8 (permalink)  
Antiguo 13/01/2009, 14:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con login y cookies

miwelillo, todo sirve para aprender, hasta los ejemplos que puedan parecer tontos, lo importante es ir entendiendo para que sirve cada cosa.

Si esperas un nombre de usuario, entonces compara el valor de la cookie que no sea cadena vacia y, de ser posible, tambien la longitud de la misma.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 13/01/2009, 14:42
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Problema con login y cookies

Muchas gracias también por este último consejo, todo lo nuevo que pueda seguir aprendiendo me sirve tantísimo!
La verdad es que estoy aprendiendo más preguntando que leyendo
Me voy a dar otra vuelta por el foro a ver que encuentro que algo he visto de meter los valores en las cookies mediante funciones de hash para que no se vea el contenido de la cookie y si me salen más dudas vendré a seguir dando un poco la tabarra

Un saludo!
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 19:13.