Foros del Web » Programando para Internet » PHP »

Ayuda con autentificación...

Estas en el tema de Ayuda con autentificación... en el foro de PHP en Foros del Web. Saludos! El código que os muestro a continuación trata de loguear usuarios a través de una base de datos MySQL y PHP. De hecho logro ...
  #1 (permalink)  
Antiguo 23/05/2007, 08:20
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Ayuda con autentificación...

Saludos!

El código que os muestro a continuación trata de loguear usuarios a través de una base de datos MySQL y PHP. De hecho logro loguearme y ver el usuario una vez entro a la página principal desde la que me envía el script. Pero he visto que si accedo directamente me permite ganar acceso como una especie de "anónimo". Es posible evitarlo y que si entro de una el script me envíe a la página de logueo?

Gracias por vuestra ayuda.

Código en el formulario "Login.php":

Cita:
<?php
// Connects to your Database
mysql_connect("localhost", "userDB", "passwordDB") or die(mysql_error());
mysql_select_db("DB_Name") or die(mysql_error());

//Checks if there is a login cookie
if(isset($_COOKIE['user_accessname']))
//if there is, it logs you in and directes you to the members page
{
$user_accessname = $_COOKIE['user_accessname'];
$user_password = $_COOKIE['user_password'];
$check = mysql_query("SELECT * FROM users WHERE user_accessname = '$user_accessname'") or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{
if ($user_password!= $info['user_password'])
{
}
else
{
header("Location: index.php");
}
}
}

//if the login form is submitted
if (isset($_POST['submit'])) { // if form has been submitted
// makes sure they filled it in
if(!$_POST['user_accessname'] | !$_POST['user_password']) {
die('You did not fill in a required field.');
}
// checks it against the database
if (!get_magic_quotes_gpc()) {
$_POST['user_email'] = addslashes($_POST['user_email']);
}
$check = mysql_query("SELECT * FROM users WHERE user_accessname= '".$_POST['user_accessname']."'") or die(mysql_error());
//Gives error if user dosen't exist
$check2 = mysql_num_rows($check);
if ($check2 == 0) {
die('That user does not exist in our database. <a href=http://www.domaine.com/register.html>Click Here to Register</a>');
}
while($info = mysql_fetch_array( $check ))
{

$_POST['user_password'] = stripslashes($_POST['user_password']);
$info['user_password'] = stripslashes($info['user_password']);
$_POST['user_password'] = ($_POST['user_password']);

//gives error if the password is wrong
if ($_POST['user_password'] != $info['user_password']) {
die('Incorrect password, please try again.');
}
else
{
// if login is ok then we add a cookie
$_POST['user_accessname'] = stripslashes($_POST['user_accessname']);
$hour = time() + 3600;
setcookie(user_accessname, $_POST['user_accessname'], $hour);
setcookie(user_password, $_POST['user_password'], $hour);
setcookie(user_name, $_POST['user_name'], $hour);
//then redirect them to the members area
header("Location: index.php");
}
}
} else {
// if they are not logged in
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table border="0">
<tr><td colspan=2><h1>Login</h1></td></tr>
<tr><td>Username:</td><td>
<input type="text" name="user_accessname" maxlength="40">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="user_password" maxlength="50">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="submit" value="Login">
</td></tr>
</table>
</form>
<?php
}
?>
Código en mi index.php:

Cita:
<?php
// Connects to your Database
mysql_connect("localhost", "userDB", "passwordDB") or die(mysql_error());
mysql_select_db("DB_Name") or die(mysql_error());

//checks cookies to make sure they are logged in
if(isset($_COOKIE['user_accessname']))
{
$user_accessname = $_COOKIE['user_accessname'];
$user_password = $_COOKIE['user_password'];
$check = mysql_query("SELECT * FROM users WHERE user_accessname = '$user_accessname'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{

//if the cookie has the wrong password, they are taken to the login page
if ($user_password != $info['user_password'])
{ header("Location: main.html");
}

//otherwise they are shown the admin area
else
{
echo 'Welcome, you are '.$user_name;
}
}
}
?>
Gracias por vuestra ayuda.
__________________
Andrew :P
  #2 (permalink)  
Antiguo 23/05/2007, 08:28
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Ayuda con autentificación...

Saludos...

No se cómo es, "acceso directamente" , pero, en cualquier caso, debería ser algo como:

sí usuario y contraseña existen
entra
sino
no entra y reenvía

Para eso, revisa el tema de las sesiones en la documentación y la redirección por header

Pendientes,
__________________
Gracias de todas todas
-----
Linux!
  #3 (permalink)  
Antiguo 23/05/2007, 08:51
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Re: Ayuda con autentificación...

Gracias por tu respuesta CACR. No obstante, creo que ese parámetro está dado en el código del index.php:

Cita:
//checks cookies to make sure they are logged in
if(isset($_COOKIE['user_accessname']))
{
Particularmente he invertido la variable a:

Cita:
//checks cookies to make sure they are logged in
if(!isset($_COOKIE['user_accessname']))
{
Pero desafortunadamente me deja seguir accediendo directamente a la "zona protegida" como usuario anónimo.
Con esto qué quiero decir: La "zona protegida" esta en www.miforo.midominio.com/main.php. Si accedo a través del "logueador" me recibirán en esa página con nombre de usuario propio. Si por el contrario (y lo he hecho desde varios PC's para verificar que no sea un problema de cookies) accedo directamente a www.miforo.midominio.com/main.php, no me muestra mi nombre pero puedo verlo todo. Con algunos ejemplos de SESSION he visto que si hago lo último el srcipt me envía a la página de "logueo".

Eso es exactamente lo que necesito hacer con el script del index.php.

Espero que me podáis ayudar...
__________________
Andrew :P
  #4 (permalink)  
Antiguo 23/05/2007, 16:27
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Re: Ayuda con autentificación...

Ninguna idea que me podáis aportar?
__________________
Andrew :P
  #5 (permalink)  
Antiguo 23/05/2007, 17:35
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
De acuerdo Re: Ayuda con autentificación...

Hola andrewp, ya entiendo lo que necesitas!

Eso que dices, son niveles de usuario, o niveles de seguridad, como quieras llamarlo. Es decir, si soy un visitante, tengo acceso a ciertas pàginas, si me logueo se supone que tengo un acceso mas amplio.

Lo que quieres es que ese "usuario anònimo", no tenga el mismo nivel de seguridad de un "usuario registrado" no??.

Sì es asì, es sencillo, maneja "perfiles" de usuarios en tu DB, con eso resuleves ru problema. Te explico:

"Usuario Anònimo" tendrà "perfil 1", y no podrà entrar a la "zona protegida".
"Usuario registrado" tendrà "perfil 2" y podrà entrar a la "zona protegida".

Entonces, en todas tus pàginas que requieran nivel de seguridad, al comienzo haces un script donde preguntas despuès de haber hecho tu consulta en la DB y haber extraìdo el perfil:

Código PHP:
if($perfil!=2)
{
header("location:pagina_de_error.php");

Espero q' sea esto lo que buscas!!!

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #6 (permalink)  
Antiguo 05/06/2007, 02:24
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Re: Ayuda con autentificación...

Gracias por tu respuesta... Lo he probado y funciona bien, es decir me lleva, según el perfil, a la zona que necesito. Pero desafortunadamente no me resuelve el tema de no acceso... Quiero decir, si la persona no está inscrita en la base de datos tendría que enviarse fuera a la subscripción....

Cómo lo podría hacer?
__________________
Andrew :P
  #7 (permalink)  
Antiguo 05/06/2007, 03:06
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Re: Ayuda con autentificación...

Ok!... Ya lo he conseguido, era más fácil de lo que parecía y no es necesario usar los niveles. Con el código inicial era suficiente añadir un

Cita:
{ die (bla bla bla); } else ....
Saludos y gracias por las pistas.

POST RESUELTO!...
__________________
Andrew :P
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 18:01.