Foros del Web » Programando para Internet » PHP »

problema al loguear

Estas en el tema de problema al loguear en el foro de PHP en Foros del Web. Con el siguiente código, consigo loguear al usuario correctamente, una vez logueado el sistema dice Bienvenido [nick]. Pero al recargas la página, ya pierde la ...
  #1 (permalink)  
Antiguo 27/07/2011, 01:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
problema al loguear

Con el siguiente código, consigo loguear al usuario correctamente, una vez logueado el sistema dice Bienvenido [nick]. Pero al recargas la página, ya pierde la sesión (creo). Recargo y vuelve a sacarme el formulario para loguear y las variables de sesión están vacias. ¿Que puede pasar?

El código es:

Código PHP:
Ver original
  1. <?php
  2.      
  3. $db_host = 'localhost';
  4. $db_user = '**********';
  5. $db_pass = '*********';
  6. $db_name = '********';
  7.  
  8. // ACCESO VIA COOKIE
  9. if (isset($_COOKIE['id_extreme']))
  10. {
  11.    
  12.     $cookie = htmlentities(trim($_COOKIE['id_extreme']));
  13.     $cookie = explode("%", $cookie);
  14.    
  15.     $cookie_user = $cookie[0];
  16.     $cookie_id = $cookie[1];
  17.     $cookie_ip = $cookie[2];
  18.    
  19.     if ($HTTP_X_FORWARDED_FOR == "")
  20.     {
  21.         $ip = getenv(REMOTE_ADDR);
  22.     }
  23.     else
  24.     {
  25.         $ip = getenv(HTTP_X_FORWARDED_FOR);
  26.     }
  27.    
  28.     if ($cookie_ip == $ip)
  29.     {
  30.         $db_link = mysql_connect($db_host, $db_user, $db_pass);
  31.         mysql_select_db($db_name, $db_link) or die("Error: No se puede seleccionar la base de datos");
  32.        
  33.         $sql = sprintf("SELECT * FROM usuarios WHERE id_extreme='%s' AND username='%s'",
  34.                             mysql_real_escape_string($cookie_id), mysql_real_escape_string($cookie_user));
  35.         $db_query = mysql_query($sql, $db_link) or die("Error: " . mysql_error());
  36.        
  37.         $row = mysql_fetch_array($db_query);
  38.         if (isset($row['username']))
  39.         {
  40.         $_SESSION["session_username"] = $row['username'];
  41.         $_SESSION["session_logeado"] = "SI";
  42.         }
  43.        
  44.         mysql_close($db_link);
  45.     }
  46.    
  47. }
  48. if ($_GET["action"] == 'entrar') {
  49.  
  50.  
  51. function error($e){
  52. echo $e';
  53. }
  54.  
  55. // Conectar a la base de datos
  56. $db_link = mysql_connect($db_host, $db_user, $db_pass);
  57. mysql_select_db($db_name, $db_link) or die("Error: " . mysql_error());
  58.  
  59. if ($_POST['username'])
  60. {
  61.    
  62.     //Comprobacion del envio del nombre de usuario y password
  63.     $username = htmlentities(trim($_POST['username']));
  64.     $password = md5($_POST['password']);
  65.    
  66.     if ($password == NULL)
  67.     {
  68.         error("No a introducido una contrasenia");
  69.        
  70.     }
  71.     else
  72.     {
  73.         $sql = sprintf("SELECT username,password FROM usuarios WHERE username='%s'", mysql_real_escape_string($username));
  74.         $db_query = mysql_query($sql, $db_link) or die("Error: " . mysql_error());
  75.         $data = mysql_fetch_array($db_query);
  76.        
  77.         if ($data['password'] != $password)
  78.         {
  79.             error("Email o password incorrectos");
  80.            
  81.         }
  82.         else
  83.         {
  84.             $sql = sprintf("SELECT username,password FROM usuarios WHERE username='%s'", mysql_real_escape_string($username));
  85.             $db_query = mysql_query($sql, $db_link) or die("Error: " . mysql_error());
  86.             $row = mysql_fetch_array($db_query);
  87.            
  88.             $username2 = $row['username'];
  89.             $_SESSION["session_username"] = $row['username'];
  90.             $_SESSION["session_logeado"] = "SI";
  91.  
  92.  
  93.             if ($_POST['recordar'])
  94.             {
  95.                 if ($HTTP_X_FORWARDED_FOR == "")
  96.                 {
  97.                     $ip = getenv(REMOTE_ADDR);
  98.                 } else {
  99.                     $ip = getenv(HTTP_X_FORWARDED_FOR);
  100.                 }
  101.                
  102.                 $id_extreme = md5(uniqid(rand(), true));
  103.                 $id_extreme2 = $username2."%".$id_extreme."%".$ip;
  104.                 setcookie('id_extreme', $id_extreme2, time()+7776000, '/');
  105.                
  106.                 $sql = sprintf("UPDATE usuarios SET id_extreme='%s' WHERE username='%s'",
  107.                                     mysql_real_escape_string($id_extreme), mysql_real_escape_string($username2));
  108.                 $query = mysql_query($sql, $db_link) or die("Error: " . mysql_error());
  109.             }
  110.  
  111.         echo "";
  112.         }
  113.     }
  114.    
  115. }
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123. }
  124. ?></p>
  125. <?php
  126. if ($_SESSION["session_logeado"] == "SI") {
  127. ?>
  128.   Bienvenido <?php echo $_SESSION['session_username']; ?>
  129.       <?php } else { ?>
  130.           <table width="69%" border="0" style="margin-bottom: 16px">
  131.         <form method="post" action="login.php">
  132.           <tr>
  133.             <td width="6%" height="40"><p><img src="<?=$statics?>u2.png" width="32" height="32" /></p></td>
  134.             <td width="35%"><input name="username"   type="text" id="username"  placeholder="Username/nick" size="100" /></td>
  135.             <td width="7%"><img src="<?=$statics?>u1.png" width="32" height="32" /></td>
  136.             <td width="39%"><input name="password"   type="password" id="password"  placeholder="Password" size="100" /></td>
  137.             <td width="13%"><p>
  138.               <input type="button" value="Entrar" />
  139.             </p></td>
  140.           </tr>
  141.           <tr>
  142.             <td height="21">&nbsp;</td>
  143.             <td height="21" colspan="2"><h4>
  144.                 <input type="checkbox" name="recordar" />
  145.               Recordarme</h4></td>
  146.             <td height="21" colspan="2"><a href="gg">Perdí mi contraseña</a> | <a href="<?=$url?>signup">Registrate</a></td>
  147.           </tr>
  148.         </form>
  149.       </table>
  150.       <?php } ?>


Espero que puedan ayudarme, no encuentro el error

Saludos!
__________________
:)
  #2 (permalink)  
Antiguo 27/07/2011, 01:41
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: problema al loguear

Creo que se te ha pasado poner session_start()
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 27/07/2011, 02:10
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: problema al loguear

Puse el sesion_start() debajo de la linea 48 del código que dejé (if ($_GET["action"] == 'entrar') {)

Pero me sigue sin funcionar...
El problema es que te loguea bien, pero pierde la sesión.. Usuario 1 y pass 1. Te dice Bienvenido 1 y no te muestra el form de inicio, pero al recargar la página, ya la sesión se perdió y vuelve a dar el formulario.

Probé de todo con el y al final decidí publicarlo aquí por si alguien podía echarme una mano con el fallo..

Gracias por responder Uncontroled_Duck
__________________
:)
  #4 (permalink)  
Antiguo 27/07/2011, 02:32
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: problema al loguear

Normalmente te recomiendan ponerlo al principio del script, y antes de las variables de session. En la línea que comentas(48) lo pones después de las variables $_SESSION["session_username"] = $row['username'];
$_SESSION["session_logeado"] = "SI";

Prueba así: <?php session_start();
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 27/07/2011, 03:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: problema al loguear

Lo puse en la linea 2 del código que publiqué. Sigue con el mismo error..

En el registro sale todo bien (http://arestaringa.com/signup) pero en el login no

Prueba en http://arestaringa.com//login a iniciar sesión con user 1 y pass 1 cuando puedas y verás que te loguea bien pero al recargar te desloguea


(Se que le faltan algunas comprobaciones, pero eso no tiene problema. Esto es que no se como arreglarlo.)
__________________
:)
  #6 (permalink)  
Antiguo 27/07/2011, 03:30
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: problema al loguear

En la línea 52. echo $e'; le sobra esa comilla.

Acabo de probarlo y si me mantiene el Bienvenido 1 aunque la recargue

En alguna parte de la web mantienes el nombre o un botón logout para saber si sigues logueado?
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #7 (permalink)  
Antiguo 27/07/2011, 06:11
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: problema al loguear

En http://arestaringa.com/s.php tiene el siguiente código:

Código PHP:
Ver original
  1. <?=$_SESSION["session_username"]?>

que debe mostrar 1 o el username que sea. Te fijas y sale blanco.

¿Ese mismo código lo probaste y te mantiene logeado?
__________________
:)
  #8 (permalink)  
Antiguo 27/07/2011, 06:11
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: problema al loguear

¿Y el session_start en s.php?
  #9 (permalink)  
Antiguo 27/07/2011, 07:00
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: problema al loguear

Las prisas me hicieron olvidar en session_start en s.php...

¡Ya funciona! Gracias a los dos
__________________
:)

Etiquetas: html, mysql, sql, formulario, variables, usuarios
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 13:43.