Foros del Web » Programando para Internet » PHP »

Autenticacion de usuarios

Estas en el tema de Autenticacion de usuarios en el foro de PHP en Foros del Web. Si otra vez yo, ya lo se hombre aún no termino de resolver una cosa y ya estoy haciendo otra... bueno pues ahora estoy un ...
  #1 (permalink)  
Antiguo 14/08/2010, 01:15
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Autenticacion de usuarios

Si otra vez yo, ya lo se hombre aún no termino de resolver una cosa y ya estoy haciendo otra... bueno pues ahora estoy un poquin atorado con mi autenticación de usuarios, sucede que tengo mi formulario html que envía los datos de sesión, hasta aquí todo funciona, luego recibo datos en el archivo que procesará la info para validar su existencia, nuevamente todo sale bien; el asunto es como sigue, no he logrado almacenar los datos del usuario, su nombre por ejemplo, para que, una vez iniciada la sesión y sin importar que página de mi sitio visite en todo momento vea la leyenda "bienvenido fulanito" y esto será así hasta que decida cerrar la sesión. Les pongo mi código para que le echen un ojo y me digan que puede estar fallando:

//acá va todo el cotorreo de la conexion a base de datos, ustedes saben

$cliente = $_POST['usuario'];
$clave = $_POST['clave'];

$cliente = stripslashes($cliente);
$clave = stripslashes($clave);
$cliente = mysql_real_escape_string($cliente);
$clave = mysql_real_escape_string($clave);

$consulta = "SELECT * FROM clientes WHERE email='$cliente' AND password='$clave'";
$usuario = mysql_db_query($base,$consulta);

if (mysql_num_rows($usuario)==1)

//esto funciona, si meto datos incorrectos veo el mensaje final de datos no validos, si son correctos inicia sesión sin pedos.

{
$datos = mysql_fetch_array($usuario);

//acá es donde no sé como coger toda la info del usuario para crear la session, o al menos yo creo que todo el desmadre esta aquí

$estado = $datos['status'];
if ($estado == 2)
{
echo "No has activado aún tu cuenta";

//ahm, si bueno algo simplista mi sistema de activación... alguna idea?

}
else
{
$id = $datos['Id'];
$nombre = $datos['nombre'];
$clase = $datos['clase'];
$mail = $datos['email'];
session_start();
$_SESSION['id'] = $id;
$_SESSION['estado'] = 'Autenticado';
$_SESSION['nombre'] = $nombre;
$_SESSION['clase'] = $clase;
$_SESSION['email'] = $mail;

echo "Bienvenido $nombre has iniciado sesión correctamente";
echo $nombre; //esta la puse de prueba para ver si cogía los datos de arriba, pero no hace nada
}
}
else
{
echo "Los datos no son válidos";
}

El asunto es que necesito esa info del usuario que se leguea ya que son, en su mayoría, personal que debe tener acceso a ciertas partes de la base de datos para editar o agregar registros, entre otras cosas, pero ademas necesito saber quién hizo la modificación, por eso paso toda esa info a la session. La línea que dice "bienvenido $nombre has iniciado sesión" no imprime nada en $nombre, es decir que la variable llega vacia.

Espero haber sido claro con esto... a veces no sé si soy peor explicando o programando...

Gracias de antemano
  #2 (permalink)  
Antiguo 14/08/2010, 04:11
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 5 meses
Puntos: 74
Respuesta: Autenticacion de usuarios

Buenas,

Esto que tienes actualmente:

Cita:
$consulta = "SELECT * FROM clientes WHERE email='$cliente' AND password='$clave'";
$usuario = mysql_db_query($base,$consulta);


¿No debería de ser así?:
Código PHP:
Ver original
  1. $consulta = "SELECT * FROM clientes WHERE email='$cliente' AND password='$clave'";
  2.  $usuario = mysql_query($consulta);

Saludos,
  #3 (permalink)  
Antiguo 14/08/2010, 04:21
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años
Puntos: 11
Respuesta: Autenticacion de usuarios

has puesto el session_start(); al principio de las paginas, ya que estas trabajando con variables de sesion?
  #4 (permalink)  
Antiguo 14/08/2010, 09:50
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Autenticacion de usuarios

Probando DeFFEr, aunque sabes? funciona bien como le tengo es sólo que busca unicamente la info de pass y email pero no toma la demás información, igual y probaré tu propuesta, gracias man.

Goth, si, es cierto lo que dices, sin embrago este archivo es justamente el que crea las variables de sesión, igual no sé si deba llevarlas pues apenas las voy a definir, el punto es que se definen y se crean aquí mismo, en este archivo y luego cuando quiero sacar la info las líneas:

echo "Bienvenido $nombre has iniciado sesion correctamente";
echo $nombre;

No regresan ningún valor, justamente porque la variable $nombre no tiene valor pese que que lo asigné con:

$nombre = $datos['nombre'];

La idea es que ese 'nombre' lo tome de la base de datos, del registro del usuario que se ha logueado porque lo voy a necesitar después, pero, si en este archivo no me devuelve ningún valor eso significa que en otros documentos será igual, no tendré ningún valor, asumo que en ningún momento selecciono los valores de mi base de datos, sólo el user y pass para validar y eso fue todo...

Gracias por sus respuestas, continúo 'viriguando'

Última edición por malkavie; 14/08/2010 a las 10:05
  #5 (permalink)  
Antiguo 14/08/2010, 10:05
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Autenticacion de usuarios

Listo DeFFER probado, funciona exactamente igual, es decir no logro que asigne valor a las variables:

$id, $nombre, $clase y $email

El cual es justamente mi problema... alguna otra sugerencia?
  #6 (permalink)  
Antiguo 14/08/2010, 10:26
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Autenticacion de usuarios

depura la consulta y muestranos q error te trae xq se ve bien
Código PHP:
Ver original
  1. $usuario = mysql_query($consulta) or die (mysql_error());
suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 14/08/2010, 10:36
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Autenticacion de usuarios

Exacto carlos_belisario, se ve bien pero no funciona del todo... he modificado un poco mi script y queda así:

$cliente = $_POST['usuario'];
$clave = $_POST['clave'];

$consulta = "SELECT * FROM clientes WHERE email LIKE '$cliente' AND password LIKE '$clave'";
$usuario = @mysql_query($consulta);

if (@mysql_num_rows ($usuario) !=0)
{
$datos = mysql_fetch_array($usuario);
if ($datos['status'] == 2)
{
echo "No has activado tu cuenta, para poder usar nuestro portal debes activar tu cuenta";
}
else
{
$datos = mysql_fetch_array($usuario) or die (mysql_error());
$id = $datos['Id'];
$nombre = $datos['nombre'];
$clase = $datos['clase'];
$mail = $datos['email'];
$status = $datos['status'];
session_start();
$_SESSION['id'] = $id;
$_SESSION['estado'] = 'Autenticado';
$_SESSION['nombre'] = $nombre;
$_SESSION['clase'] = $clase;
$_SESSION['email'] = $mail;
$_SESSION['status'] = $status;

echo "Has iniciado sesi&oacute;n correctamente<br>";
echo "Bienvenido $nombre";

}
}
else
{
echo "Los datos de inicio no son v&aacute;lidos";
}

Hasta ahora puedo iniciar sesión correctamente si los datos son válidos y si no son válidos me muestra el mensaje correspondiente, todo va bien después del primer 'if' pues compara datos, el segundo 'if' donde extraigo el valor del 'status' en mi Bd ya funciona, es decir si ese 'status' es 2 muestra el mensaje de activación. Es justamente el 'else' de esta sentencia el que no guarda los datos de las variables que necesito, sólo este else no registra $id, $nombre, $clase y $email por lo tanto cuando le pido un - echo $nombre; - no devuelve nada, probé lo que me dices en la lína con itálicas y obtengo una página en blanco, todo lo demás está bien... curioso caso

Última edición por malkavie; 14/08/2010 a las 10:46
  #8 (permalink)  
Antiguo 14/08/2010, 11:05
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Autenticacion de usuarios

Cita:
$datos = mysql_fetch_array($usuario) or die (mysql_error());
$id = $datos['Id'];
$nombre = $datos['nombre'];
$clase = $datos['clase'];
$mail = $datos['email'];
$status = $datos['status'];
session_start();
$_SESSION['id'] = $id;
$_SESSION['estado'] = 'Autenticado';
$_SESSION['nombre'] = $nombre;
$_SESSION['clase'] = $clase;
$_SESSION['email'] = $mail;
$_SESSION['status'] = $status;
paa q vuelves a hacer la misma consulta?? y otra cosa esas haciendo doble asignaciopn estas asignando a una variable para luego por esa variable asignar a la variable de session haslo directo a la variable de session y te ahoras algo q estas haciendo doble
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #9 (permalink)  
Antiguo 14/08/2010, 11:30
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Autenticacion de usuarios

Simón bombón, ya quedó...

Efectivamente carlos, estaba haciendo doble consulta, ya lo eliminé y por otra parte la variable $nombre la envié a la session, por eso ya no podría capturarla después, hice algunas pruebas:

1. Los dos 'echo' los puse antes de definir la session y obtuve: Warning: session_start() [function.session-start]: Cannot send session cache limiter, header already been sent. Sin embargo el 'echo $nombre' me devolvía la info de la BD de datos que necesitaba, es decir si estaba tomando la info de ahí.

2. Hice el paso directo como indicas:
session_start();
$_SESSION['id'] = $datos['Id'];
$_SESSION['estado'] = 'Autenticado';
$_SESSION['nombre'] = $datos['nombre'];
$_SESSION['clase'] = $datos['clase'];
$_SESSION['email'] = $datos['email'];
y parece estar funcionando

3. Finalmente para ver si efectivamente se habían seleccionado los datos que necesito le pedí que los pusiera en pantalla con algunos echo, algo así:

echo "Bienvenido<b>".$datos['nombre']."</b>. Has iniciado sesi&oacute;n"

Y parece que ya esta funcionando como quiero, sólo debo ver que las variables de sesion hayan pasado sin pedos...
  #10 (permalink)  
Antiguo 14/08/2010, 11:33
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Autenticacion de usuarios

q bien q allas solucionado y para q hagas una verificacion de si se lleno la variable de session haz un echo de estas ej
Código PHP:
Ver original
  1. echo " la id es ".$_SESSION['id'];
por ponerte un ejemplo suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #11 (permalink)  
Antiguo 14/08/2010, 11:35
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Autenticacion de usuarios

Tan pronto verifique que las variables de sesion pasaron sin pedos publico mi script de autenticación para que otrs puedan usarlo, si les apetece...
  #12 (permalink)  
Antiguo 14/08/2010, 11:48
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Autenticacion de usuarios

Genial, funciona de maravilla, comparto el script de autenticación

<?
$host = 'servidor';
$user = 'usuario';
$pass = 'password';
$base = 'base_de_datos';
$conexion = mysql_connect($host,$user,$pass) or die ("No se puede conectar a base de datos.");
mysql_select_db($base,$conexion) or die ("No fue posible seleccionar la base de datos."); //datos de conexion al servidor

$cliente = $_POST['usuario'];
$clave = $_POST['clave'];
// recibimos los datos del formulario

$cliente = stripslashes($cliente);
$clave = stripslashes($clave);
$cliente = mysql_real_escape_string($cliente);
$clave = mysql_real_escape_string($clave); //evita la inyección de datos en tu base MySQL, cuestión de seguridad

$consulta = "SELECT * FROM clientes WHERE email='$cliente' AND password='$clave'";
$usuario = @mysql_query($consulta);
//consultamos si existe o no dicha combinación usuario-contraseña

if (@mysql_num_rows ($usuario) !=0)
{
$datos = mysql_fetch_array($usuario);
if ($datos['status'] == 2) // esta parte me sirve a mi como validación de cuenta activa, quizá esté de más para otra persona
{
echo "No has activado tu cuenta, para poder usar nuestro portal debes activar tu cuenta"; //lo mismo de la validación
}
else
{
session_start();
$_SESSION['id'] = $datos['Id'];
$_SESSION['estado'] = 'Autenticado';
$_SESSION['nombre'] = $datos['nombre'];
$_SESSION['clase'] = $datos['clase'];
$_SESSION['email'] = $datos['email']; //definimos variables de sesión con los datos obtenidos
echo "Bienvenido <b>".$_SESSION['nombre']."</b> has iniciado sesi&oacute;n<br>";
echo "Tu número de identificación es: <b>".$_SESSION['id']."</b><br>";
echo "Tu usuario es: <b>".$_SESSION['email']."</b><br>";
echo "Tus credenciales de usuario son como: <b>".$_SESSION['clase']."</b><br>";
echo "Tú estás: <b>" .$_SESSION['estado']. "</b><br>";
echo "Disfruta tu estancia";//todo esto es sólo para comprobar que las variables hayan sido guardadas, esto puede reemplazarse con un redireccionamiento a la página que deseemos
}
}
else
{
echo "Los datos de inicio no son v&aacute;lidos"; // mensaje en caso de que no sea válida la combinación usuario-contraseña
}

?>

Y creo que eso es todo, espero sirva a alguien más. Gracias por su ayuda cualquier cosa aqui estoy.
  #13 (permalink)  
Antiguo 14/08/2010, 11:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Autenticacion de usuarios

disculpa pero session_start(); en ese sitio no te dio error?? xq segun tengo entendido el session_start(); debe estar al principio de la pagina php y bueno pudieras colocarlo entre las etiqtas[PHP ][/PHP ] para q se aprecie mejor suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #14 (permalink)  
Antiguo 14/08/2010, 12:54
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Autenticacion de usuarios

uhm... pues no, no me dio error supongo que es asi porque estoy apenas definiendo la sesión, quizá si intentara colocarlo en otro documento si me arrojaría el error. Es cierto, debe estar al principio de los documentos donde se use la session que se ha creado... hasta donde yo sé, por lo pronto aquí funcionó bien.

Etiquetas: 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 19:20.