Foros del Web » Programando para Internet » PHP »

Sistema de Login :S

Estas en el tema de Sistema de Login :S en el foro de PHP en Foros del Web. Hola, tengo un sistema de login, funciona perfecto, el caso es que relleno el formulario, me loguea correctamente y me crea las cookies. Despues de ...
  #1 (permalink)  
Antiguo 11/05/2010, 01:52
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Sistema de Login :S

Hola, tengo un sistema de login, funciona perfecto, el caso es que relleno el formulario, me loguea correctamente y me crea las cookies.
Despues de enviar el contenido a ingresar.php y lo gestiona hace el header(location: administracion.php) y ahí me da como si no estubiese logueado, y tengo que actualizar la página para que funcione...

Me gustaría que no hiciese falta actualizar, claro esta.. xD

Os dejo los codigos:

ingresar.php
Código PHP:
<?php
   
include("conex.php");
function 
quitar($mensaje)
   {
   
$mensaje str_replace("<","&lt;",$mensaje);
   
$mensaje str_replace(">","&gt;",$mensaje);
   
$mensaje str_replace("\'","'",$mensaje);
   
$mensaje str_replace('\"',"&quot;",$mensaje);
  
$mensaje str_replace("\\\\","\\",$mensaje);
  return 
$mensaje;
   }
  
  if(
trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
  {
  
$nickN quitar($HTTP_POST_VARS["nick"]);
  
$passN quitar($HTTP_POST_VARS["password"]);
  
$result mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
  if(
$row mysql_fetch_array($result))
   {
  if(
$row["password"] == $passN)
  {
  
//La cookie dura 1 hora
  
setcookie("usNick",$nickN,time()+36000);
  
setcookie("usPass",$passN,time()+36000);
  
?>
  Logueado correctamente, ahora sera dirigido a el panel de administración.
  <SCRIPT LANGUAGE="javascript">
  location.href = "administracion.php";
  </SCRIPT>
  <?
  
}
  else
  {
  echo 
"Contraseña incorrecta";
  }
  }
   else
  {
  echo 
"Ese Usuario no existe en la base de datos";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"Debe especificar un nick y password";
  }
  
mysql_close();  
  
?>
login.php
Código PHP:
   <?php
   $loginCorrecto 
false;
   
$idUsuarioL;
   
$nickUsuarioL;
   
$emailUsuarioL;
   
$nombreUsuarioL;
  
   if(isset(
$HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"]))
    {
  
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
  
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
  if(
$row mysql_fetch_array($result))
  {
  
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000);
  
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000);
  
$loginCorrecto true;
  
$idUsuarioL $row["id"];
  
$nickUsuarioL $row["nick"];
  
$emailUsuarioL $row["email"];
  
$nombreUsuarioL $row["nombre"];
  }
  else
  {
  
//Destruimos las cookies.
  
setcookie("usNick","x",time()-3600);
  
setcookie("usPass","x",time()-3600);
  }
   
mysql_free_result($result);
  }
  
?>

Y así compruebo si esta logueado o no, para mostrarle la página o un error de que NO esta logueado.

Código PHP:
<?php  
  
include("login.php"); 
  if(
$loginCorrecto)
  {
  echo 
"Aqui el contenido solo para usuarios registrados";
  }
  else
  {
  echo 
"El sistema no lo ha identificado, solo los usuarios registrados tienen acceso a esta area";
  }

A ver si me podeis echar una mano para que no me toque actualizar la pagina, o que se actualize sola o algo asi.. :S

Un saludo y gracias.

Última edición por Flow89; 11/05/2010 a las 01:59
  #2 (permalink)  
Antiguo 11/05/2010, 02:52
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Sistema de Login :S

¿Por que vuelves a crear las cookies en login.php si se supone que ya han sido creadas en ingresar.php?, Se supone que solo deberías comprobar los datos de las cookies, en caso de que existan, pero, ¿Porque las recreas de nuevo?
  #3 (permalink)  
Antiguo 11/05/2010, 03:28
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Cita:
Iniciado por Heli0s Ver Mensaje
¿Por que vuelves a crear las cookies en login.php si se supone que ya han sido creadas en ingresar.php?, Se supone que solo deberías comprobar los datos de las cookies, en caso de que existan, pero, ¿Porque las recreas de nuevo?
No se si me vas a entender pero bueno, te explico.

El login.php para lo que sirve es para ver si estas logueado, y en todas las páginas que quiero que se vean solo si estas logueado incluyo esto:

Código PHP:
<?php  
  
include("login.php"); 
  if(
$loginCorrecto)
  {
  echo 
"Aqui el contenido solo para usuarios registrados";
  }
  else
  {
  echo 
"El sistema no lo ha identificado, solo los usuarios registrados tienen acceso a esta area";
  } 
?>
En ingresar.php, lo que hace es procesar los datos que le envíes desde panel.php (que es el formulario para loguearse) y crear las cookies.



Si hay algo que sobra, o tal, dímelo, porque seguí un tutorial de Internet y lo hacia así...
  #4 (permalink)  
Antiguo 11/05/2010, 04:23
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Sistema de Login :S

Lo que yo veo que sobra es lo de crear cookies en login.php, ya que como tu has dicho, es para ver si estás logeado, no para logearte, y como no es para logearte no tienes necesidad alguna de crear cookies, no crees?, solo tienes que comprobar los valores que habrán en el array $_COOKIES si estás estas logeado, en caso contrario estará vacío y deberá pasar por ingresar.php para logearse y crear cookies.

Para lo único que veo lógico eso, es para que la cookie no caduque, pero otra cosa que no veo lógica es que en un lado le des 1 hora de vida y en ese script le das muchísimo más tiempo de vida, y creo que el problema está ahí, ya que las cookies cuando las creas aún no son efectivas, hay que recargar la página, por lo tanto te aconsejo que solo las crees en un lado, en ingresar.php, el cual reedirecionara a los 5 o 10 segundos a otra página y las cookies ya serán efectivas

Un saludo
  #5 (permalink)  
Antiguo 11/05/2010, 04:42
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Cita:
Iniciado por Heli0s Ver Mensaje
Lo que yo veo que sobra es lo de crear cookies en login.php, ya que como tu has dicho, es para ver si estás logeado, no para logearte, y como no es para logearte no tienes necesidad alguna de crear cookies, no crees?, solo tienes que comprobar los valores que habrán en el array $_COOKIES si estás estas logeado, en caso contrario estará vacío y deberá pasar por ingresar.php para logearse y crear cookies.

Para lo único que veo lógico eso, es para que la cookie no caduque, pero otra cosa que no veo lógica es que en un lado le des 1 hora de vida y en ese script le das muchísimo más tiempo de vida, y creo que el problema está ahí, ya que las cookies cuando las creas aún no son efectivas, hay que recargar la página, por lo tanto te aconsejo que solo las crees en un lado, en ingresar.php, el cual reedirecionara a los 5 o 10 segundos a otra página y las cookies ya serán efectivas

Un saludo
Si, lo del tiempo de vida es que lo he cambiado en uno y en otro no, se me ha olvidado xD.

Es decir, lo que tengo que hacer es dejar en login.php lo siguiente;

Código PHP:
   <?php
   $loginCorrecto 
false;
   
$idUsuarioL;
   
$nickUsuarioL;
   
$emailUsuarioL;
   
$nombreUsuarioL;
  
   if(isset(
$HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"]))
    {
  
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
  
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
   
mysql_free_result($result);
  
?>
No?
  #6 (permalink)  
Antiguo 11/05/2010, 04:45
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Sistema de Login :S

Sí, ahí recoges los datos, falta que compruebes si la sentencia SQL ha recogido alguna fila para comprobar si realmente es un usuario correcto.


Un saludo
  #7 (permalink)  
Antiguo 11/05/2010, 04:52
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Código PHP:
   <?php
   $loginCorrecto 
false;
   
$idUsuarioL;
   
$nickUsuarioL;
   
$emailUsuarioL;
   
$nombreUsuarioL;
  
   if(isset(
$HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"]))
    {
  
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
  
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
  if(
$row mysql_fetch_array($result))
{
  
$loginCorrecto true;
  
$idUsuarioL $row["id"];
  
$nickUsuarioL $row["nick"];
  
$emailUsuarioL $row["email"];
  
$nombreUsuarioL $row["nombre"];
  }
  else
  {
  
$loginCorrecto false;
  
$idUsuarioL $row["id"];
  
$nickUsuarioL $row["nick"];
  
$emailUsuarioL $row["email"];
  
$nombreUsuarioL $row["nombre"];
}
mysql_free_result($result); 
}

Así o como? xD

Presiento k la voy a liar y va a dejar de funcionar.. y ahora esta funcionando bien xD
  #8 (permalink)  
Antiguo 11/05/2010, 04:56
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Sistema de Login :S

Código PHP:
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
$row mysql_fetch_array($result);
if(
mysql_num_rows($row) == 1){
    
$userConected true;
} else {
    
$userConected false;
}
mysql_free_result($result); 
Así
  #9 (permalink)  
Antiguo 11/05/2010, 05:10
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

osea que el login.php quedaría de esta forma

Código PHP:

   <?php
   $loginCorrecto 
false;
   
$idUsuarioL;
   
$nickUsuarioL;
   
$emailUsuarioL;
   
$nombreUsuarioL;
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
$row mysql_fetch_array($result);
if(
mysql_num_rows($row) == 1){
    
$userConected true;
} else {
    
$userConected false;
}
mysql_free_result($result);

voy a implementarlo y a probar..
  #10 (permalink)  
Antiguo 11/05/2010, 05:12
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Cita:
Iniciado por Flow89 Ver Mensaje
osea que el login.php quedaría de esta forma

Código PHP:

   <?php
   $loginCorrecto 
false;
   
$idUsuarioL;
   
$nickUsuarioL;
   
$emailUsuarioL;
   
$nombreUsuarioL;
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
$row mysql_fetch_array($result);
if(
mysql_num_rows($row) == 1){
    
$userConected true;
} else {
    
$userConected false;
}
mysql_free_result($result);

voy a implementarlo y a probar..
Lo estoy revisando y... el $userConecte de donde lo sacas, porque yo no utilizo esa variable.. utilizo $loginCorrecto
  #11 (permalink)  
Antiguo 11/05/2010, 05:30
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Sistema de Login :S

Era un ejemplo, tienes que usar la variable que uses tu.


Un saludo
  #12 (permalink)  
Antiguo 12/05/2010, 02:09
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Respecto a lo de actualizar la página, que solo me pasa en IE7

Que puedo hacer?

PD: Voy a implementar el login.php a ver si funciona correctamente.
  #13 (permalink)  
Antiguo 12/05/2010, 02:17
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a7366460/public_html/loginpanel/login.php on line 10

Código PHP:
<?php
   $loginCorrecto 
false;
   
$idUsuarioL;
   
$nickUsuarioL;
   
$emailUsuarioL;
   
$nombreUsuarioL;
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
$rows mysql_fetch_array($result);
if(
mysql_num_rows($rows) == 1){
    
$loginCorrecto true;
} else {
    
$loginCorrecto false;
}
mysql_free_result($result);
  
?>
Ves... si sabia yo que algun problema iba a dar jajajajaj
  #14 (permalink)  
Antiguo 12/05/2010, 02:38
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Sistema de Login :S

Fue fallo mio, a mysql_num_rows le tienes que pasar por parámetro el valor que devuelve mysql_query, en este caso me refiero a $result, no el valor que devuelve mysql_fetch_array, prueba a cambiarlo.

Respecto a lo de actualizar la página, cuando hagas el cambio muéstrame de nuevo los códigos para que los examine.

Un saludo
  #15 (permalink)  
Antiguo 12/05/2010, 03:07
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Ahora si funciona, el puto Internet Explorer me da un asco!! QUE LA GENTE DEJE DE USARLO!!! ES UNA MIERDA!! ajjaja

te paso codigos a ver.. pero ya te digo en mozilla tira perfecto y en IE toca los webos...

ingresar.php
Código PHP:
<html>
<head>
<title>JuventudMDC - Panel de Administraci&oacute;n</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
   
include("conex.php");
function 
quitar($mensaje)
   {
   
$mensaje str_replace("<","&lt;",$mensaje);
   
$mensaje str_replace(">","&gt;",$mensaje);
   
$mensaje str_replace("\'","'",$mensaje);
   
$mensaje str_replace('\"',"&quot;",$mensaje);
  
$mensaje str_replace("\\\\","\\",$mensaje);
  return 
$mensaje;
   }
  
  if(
trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
  {
  
$nickN quitar($HTTP_POST_VARS["nick"]);
  
$passN quitar($HTTP_POST_VARS["password"]);
  
$result mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
  if(
$row mysql_fetch_array($result))
   {
  if(
$row["password"] == $passN)
  {
  
//La cookie dura 1 hora
  
setcookie("usNick",$nickN,time()+36000);
  
setcookie("usPass",$passN,time()+36000);
  echo 
"<table style=\"height:100%;width:100%;\" border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Logueado correctamente, ahora sera dirigido a el panel de administración automaticamente.</div></td></tr></table>";
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=administracion.php\">";
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Contraseña incorrecta. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Ese Usuario no existe en la base de datos. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Debe especificar un nick y password. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_close();  
  
?> 
</body>
</html>

login.php
Código PHP:
<?php
   $loginCorrecto 
false;
   
$idUsuarioL;
   
$nickUsuarioL;
   
$emailUsuarioL;
   
$nombreUsuarioL;
$result mysql_query("SELECT * FROM usuarios WHERE nick='".
$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
$rows mysql_fetch_array($result);
if(
mysql_num_rows($result) == 1){
    
$loginCorrecto true;
} else {
    
$loginCorrecto false;
}
mysql_free_result($result);
  
?>
  #16 (permalink)  
Antiguo 12/05/2010, 03:12
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Sistema de Login :S

¿Entonces ya te funciona todo bien?
  #17 (permalink)  
Antiguo 12/05/2010, 03:23
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Sistema de Login :S

Sí funciona correctamente, lo que pasa que en IE hay veces que pilla las cookies bien y otras que como no refresques no las pilla y te dice que no estas logueado.

Un saludo y gracias.

Etiquetas: login, sitemap
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 02:45.