Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Autenticacion de usuarios

Estas en el tema de Autenticacion de usuarios en el foro de PHP en Foros del Web. Hola amigos, posteo este tema en este foro ya que estoy seguro que me ayudaran a resolver el problema. este codigo fue tomado de otro ...
  #1 (permalink)  
Antiguo 26/05/2013, 14:05
 
Fecha de Ingreso: septiembre-2004
Ubicación: Maracay Edo. Aragua
Mensajes: 45
Antigüedad: 20 años, 2 meses
Puntos: 0
Pregunta Autenticacion de usuarios

Hola amigos, posteo este tema en este foro ya que estoy seguro que me ayudaran a resolver el problema. este codigo fue tomado de otro foro pero no me dan respuesta y necesito ayuda.

Este es un sistema de usuarios con protección de pagina.

El problema es que el sistema de registro me funciona bien inserta los datos en la tabla de usuarios perfectamente pero cuando intento entrar con el formulario users_Login.php no me deja acceder siempre me manda para la pagina de error......

Pego el codigo tal cual esta para que me ayuden

::::::::Insertamos nuestra tabla de datos en PHPMyAdmin::::::::::::::::

CREATE TABLE `usuarios` (
`id` int(10) NOT NULL auto_increment,
`usuario` varchar(99) NOT NULL default '',
`password` varchar(99) NOT NULL default '',
`fname` varchar(99) NOT NULL default '',
`lname` varchar(99) NOT NULL default '',
`email` varchar(99) NOT NULL default '',
`imagen_perfil` varchar(99) NOT NULL default '',
PRIMARY KEY (`id`))

::::::::::::::::Creamos el archivo de conexión a la Base de Datos.:::::::::

db.php

Código PHP:
<?php
   $dbHost 
"localhost";        //Ubicación de la DB, usualmente es localhost
    
$dbUser "xxxx";            //Usuario de la DB
    
$dbPass "xxxxxx";            //Password de la DB
    
$dbDatabase "db_name";    //Nombre de la DB
     
    
$db mysql_connect($dbHost,$dbUser,$dbPass)or die("Un error ha ocurrido mientras se intento conectar a la Base de Datos.");
    
//Conexión hacia la Base de Datos
    
mysql_select_db($dbDatabase$db)or die("No se pudo seleccionar la Base de Datos."); 
    
//Selecciona la DB
 
?>
::::::Hacemos nuestro lugar de inicio de sesión, para que se puedan logear los usuarios.:::::::

users_Login.php

Código PHP:
<link rel="stylesheet" href="css/d13.css">
<
div class="fnews">
<
form action="users_Verify.php" method="post">
   
Por favorescriba los datos necesarios para iniciar sesi&oacute;n:
<
br>
<
br>

Nombre de Usuario
<
input name="usuario" type="text" id="usuario" size=25>
Contraseña
<
input type="password" name="password" size=25>
<
input name="submit" type="submit" class="m" id="submit" value="Iniciar Sesión">
</
form><br><br>
<
strong>¿No tienes una cuentaRegistrate gratis</strong> <class="sm" href="users_Register.php"><strong>aquí</strong></a></div
::::::::::::Ahora, creamos el registro para los nuevos usuarios.::::::::::::::::::

users_Register.php

Código PHP:
<?php 
session_start
();
include(
"db.php"); 
?>
<link rel="stylesheet" href="css/d13.css">
<H1>Crear una nueva cuenta</H1><br>
<?php 
if(isset($_POST['submit'])){ 
    
$query sprintf("SELECT * FROM usuarios WHERE usuario='%s' LIMIT 1",mysql_real_escape_string($_POST['usuario']));
    
$sql mysql_query($query); 
    
$row mysql_fetch_array($sql); 
    if(
$row||empty($_POST['usuario'])|| empty($_POST['fname'])||empty($_POST['lname'])|| empty($_POST['email'])||empty($_POST['password'])|| empty($_POST['re_password'])||$_POST['password']!=$_POST['re_password']){ 
        
# si se deja un campo vacío va a tirar un error.
        
$error '<p>'
        if(empty(
$_POST['usuario'])){ 
            
$error .= 'El campo "Nombre de Usuario" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['fname'])){ 
            
$error .= 'El campo "Nombre" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['lname'])){ 
            
$error .= 'El campo "Apellido" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['email'])){ 
            
$error .= 'El campo "Email" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['password'])){ 
            
$error .= 'El campo "Contraseña" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['re_password'])){ 
            
$error .= 'Debes repetir la contraseña<br>'
        } 
        if(
$_POST['password']!=$_POST['re_password']){ 
            
$error .= 'Las contraseñas no concuerdan.<br>'
        } 
        if(
$row){ 
            
$error .= 'El nombre de usuario que has escojido ya existe en la Base de Datos.<br>'
        } 
        
$error .= '</p>'
    }else{ 
        
$query sprintf("INSERT INTO usuarios(`usuario`,`fname`,`lname`,`email`,`password`)
            VALUES('%s','%s','%s','%s',PASSWORD('%s'))"

            
mysql_real_escape_string($_POST['usuario']), 
            
mysql_real_escape_string($_POST['fname']), 
            
mysql_real_escape_string($_POST['lname']), 
            
mysql_real_escape_string($_POST['email']), 
            
mysql_real_escape_string($_POST['password']))or die(mysql_error());
        
$sql mysql_query($query); 
        
# Redireccion a la página de logueo despues del registro.
        
header("Location: users_Login.php"); 
        exit; 
    } 

if(isset(
$error)){ 
    echo 
$error
    unset(
$error); 

?>  
<!-- Start your HTML/CSS/JavaScript here --> 
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<div align=center>
  <h3>Datos principales: </h3>
    <TABLE class="gp">

    <TR>
      <TD CLASS="slim">Usuario:</TD>
      <TD colspan=2><input name="usuario" type="text" id="usuario" size="20" <? if(!$row){echo 'value="'.$_POST['usuario'].'"';} ?>/></TD></TR>
    <TR>
      <TD CLASS="slim">Correo electrónico:</TD>
      <TD><input name="email" type="text" size="20" <? echo 'value="'.$_POST['email'].'"'?>/></td><td>
</TD></TR>
    <TR>
      <TD CLASS="slim">Contraseña:</TD>
      <TD><input name="password" type="password" size="20" /></TD></TR>
    <TR>
      <TD CLASS="slim">Repite Contraseña:</TD>
      <TD><input name="re_password" type="password" size="20" /></TD></TR>
</TABLE><br>
    <h3>Datos personales: </h3>
    <TABLE class="gp">

    <TR>
      <TD CLASS="slim">Nombre:</TD>
      <TD colspan=2><input name="fname" type="text" size="20" <? echo 'value="'.$_POST['fname'].'"'?>/></TD></TR>
    <TR>
      <TD CLASS="slim">Apellido:</TD>
      <TD><input name="lname" type="text" size="20" <? echo 'value="'.$_POST['lname'].'"'?>/></td><td>
</TD></TR>
</TABLE><br>
  PHP Snippets - Sistema de Usuarios BETA<br>
  <br> 
  </p>


  <INPUT name="submit" TYPE=submit CLASS="sum" id="submit" VALUE="¡Registrar cuenta!">

</div>
</form>
:::::::::::Ahora que tenemos todo lo esencial, creamos el archivo de verificación de logueo.:::::

users_Verify.php

Código PHP:
<?php 
include("db.php");
if(isset(
$_POST['submit'])){ 
    
$usr mysql_real_escape_string($_POST['usuario']); 
    
$pas hash('sha256'mysql_real_escape_string($_POST['password'])); 
    
$sql mysql_query("SELECT * FROM usuarios  
        WHERE usuario='$usr' AND 
        password='$pas' 
        LIMIT 1"
); 
    if(
mysql_num_rows($sql) == 1){ 
        
$row mysql_fetch_array($sql); 
        
session_start(); 
        
$_SESSION['usuario'] = $row['usuario']; 
        
$_SESSION['fname'] = $row['fname']; 
        
$_SESSION['lname'] = $row['lname']; 
        
$_SESSION['logged'] = TRUE
        
header("Location: users_PageVip.php"); // Puedes modificar la pagina a la cual te guste que valla despues del inicio de sesión
        
exit; 
    }else{ 
        
header("Location: users_Login.php"); 
        exit; 
    } 
}else{ 
    
header("Location: index.php");     
    exit; 

?>
::::Por ultimo, para concretar este tutorial, haremos la página privada que solo el usuario registrado puede ver::::::

users_PageVip.php

Código PHP:
<link rel="stylesheet" href="css/d13.css">
<?php 
session_start
(); 
include(
"db.php"); 
?>
<?
if($_SESSION['logged']==TRUE){ ?>

<H1>Página privada de usuarios</H1><br>
<div class="fnews">
   ¡Hola, <? echo("$_SESSION[usuario]");?>! Eres un usuario registrado, por lo tanto, puedes ver esta página. 
</div>

<? }
else echo(
"Lo sentimos, pero solo usuarios registrados pueden ver esto.");
?>

::::::Proteger las paginas para que no accedan por links:::::::

Código PHP:
<?php 
session_start
(); 
include(
"db.php"); 
?>
<?
if($_SESSION['logged']==TRUE){ ?>

EL CONTENIDO AQUI!!!!!!!  :D

<? }
else echo(
"Lo sentimos, pero solo usuarios registrados pueden ver esto.");
?>


OJO ESTO NO ES UN ROBO DE DATOS SOLO QUE NO ME DAN RESPUESTA EN EL OTRO FORO Y ESTOY SEGURO QUE EN ESTE ME AYUDARAN... Y TAMBIEN LE SERVIRA A ALGUIEN QUE LO NECESITE..

FUENTE: http://www.phperos.net/foro/index.php?topic=8421.0
  #2 (permalink)  
Antiguo 26/05/2013, 14:43
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Autenticacion de usuarios

en el registro no estas hasheando el pass como si lo haces en la verificacion, nunca seran igual las pass en el momento del login
  #3 (permalink)  
Antiguo 26/05/2013, 14:55
 
Fecha de Ingreso: septiembre-2004
Ubicación: Maracay Edo. Aragua
Mensajes: 45
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Autenticacion de usuarios

Gracias por tu pronta respuesta, la verdad es que soy novato en php solo estoy tratando de implementar el código en mi pagina si es mucho abuso en pedirte que me lo postees arreglado por que no se a que te estas refieriendo... de ante mano Gracias y disculpa el abuso.....
  #4 (permalink)  
Antiguo 26/05/2013, 14:58
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Autenticacion de usuarios

esta linea la usas para hashear el pass que el usuario introduce en el formulario de login para despuesc ompararla con la de la bd

$pas = hash('sha256', mysql_real_escape_string($_POST['password'])); users_Verify.php

y esta usas en el momento de registrarse y guardas en la bd

mysql_real_escape_string($_POST['password'] users_Register.php

si te fijas veras una diferencia tan solo es implementar la misma funcion de la verificacion en la del registro

si no la hasheas en ambos procedimeintos nunca seran igual mientars que hasheada quedaria asi ndn8s9dfyg8shg8rf0ghdgh8fg y sin hashear algoasi por lo cual nunca seran iguales

Última edición por webankenovi; 26/05/2013 a las 15:06
  #5 (permalink)  
Antiguo 26/05/2013, 15:18
 
Fecha de Ingreso: septiembre-2004
Ubicación: Maracay Edo. Aragua
Mensajes: 45
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Autenticacion de usuarios

Bueno, comprendi tu explicación mas como te comento soy muy novato en php y trate de suplantar las cadenas que me comentas para colocarlas igual y no logro por que me dice error de sintaxis...

Quizas sea un error grave lo que estoy haciendo pero esto fue lo que intente hacer.


En register.

Código PHP:
 mysql_real_escape_string($_POST['password'])) 
Intente colocar en Verify

La misma cadena en hash('sha256', mysql_real_escape_string($_POST['password'])) intente colocar mysql_real_escape_string($_POST['password'])) y me sale error....
  #6 (permalink)  
Antiguo 26/05/2013, 15:20
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Autenticacion de usuarios

en verify

$pas = hash('sha256', mysql_real_escape_string($_POST['password']));

en register

Código PHP:
Ver original
  1. $query = sprintf("INSERT INTO usuarios(`usuario`,`fname`,`lname`,`email`,`password`)
  2.            VALUES('%s','%s','%s','%s',PASSWORD('%s'))",
  3.             mysql_real_escape_string($_POST['usuario']),
  4.             mysql_real_escape_string($_POST['fname']),
  5.             mysql_real_escape_string($_POST['lname']),
  6.             mysql_real_escape_string($_POST['email']),
  7.             hash('sha256', mysql_real_escape_string($_POST['password'])))or die(mysql_error());
  8.         $sql = mysql_query($query);

a y en la bd en el campò de la contraseña dale suficientes caracteres ponle 100 para que hagas pruebas y no te falle luego ya veras las pass encriptadas en la bd y ya baja los caracteres a los que necesites
  #7 (permalink)  
Antiguo 26/05/2013, 15:24
 
Fecha de Ingreso: septiembre-2004
Ubicación: Maracay Edo. Aragua
Mensajes: 45
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Autenticacion de usuarios

Disculpa el comentario anterior... ya comprendi.

Genere el codigo en formato sha-256 lo modifique en la base de datos y funciono perfecto

ahora mi problema es que no se hacer esa cadena que me comentas para que en la base de datos llegue como sha-256
  #8 (permalink)  
Antiguo 26/05/2013, 15:27
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Autenticacion de usuarios

te lo acabo de comentar un post antes , lo correcto es tenerlo hasheado y recuerda dale suficiente longitud a ese campo contraseña en la bd
  #9 (permalink)  
Antiguo 26/05/2013, 15:39
 
Fecha de Ingreso: septiembre-2004
Ubicación: Maracay Edo. Aragua
Mensajes: 45
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Autenticacion de usuarios

Hice lo que me indicastes en el archivo:

users_Register.php

Código PHP:
<?php 
session_start
();
include(
"db.php"); 
?>
<link rel="stylesheet" href="css/d13.css">
<H1>Crear una nueva cuenta</H1><br>
<?php 
if(isset($_POST['submit'])){ 
    
$query sprintf("SELECT * FROM usuarios WHERE usuario='%s' LIMIT 1",mysql_real_escape_string($_POST['usuario']));
    
$sql mysql_query($query); 
    
$row mysql_fetch_array($sql); 
    if(
$row||empty($_POST['usuario'])|| empty($_POST['fname'])||empty($_POST['lname'])|| empty($_POST['email'])||empty($_POST['password'])|| empty($_POST['re_password'])||$_POST['password']!=$_POST['re_password']){ 
        
# si se deja un campo vacío va a tirar un error.
        
$error '<p>'
        if(empty(
$_POST['usuario'])){ 
            
$error .= 'El campo "Nombre de Usuario" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['fname'])){ 
            
$error .= 'El campo "Nombre" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['lname'])){ 
            
$error .= 'El campo "Apellido" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['email'])){ 
            
$error .= 'El campo "Email" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['password'])){ 
            
$error .= 'El campo "Contraseña" se ha dejado vacío.<br>'
        } 
        if(empty(
$_POST['re_password'])){ 
            
$error .= 'Debes repetir la contraseña<br>'
        } 
        if(
$_POST['password']!=$_POST['re_password']){ 
            
$error .= 'Las contraseñas no concuerdan.<br>'
        } 
        if(
$row){ 
            
$error .= 'El nombre de usuario que has escojido ya existe en la Base de Datos.<br>'
        } 
        
$error .= '</p>'
    }else{ 
$query sprintf("INSERT INTO usuarios(`usuario`,`fname`,`lname`,`email`,`password`)
            VALUES('%s','%s','%s','%s',PASSWORD('%s'))"

            
mysql_real_escape_string($_POST['usuario']), 
            
mysql_real_escape_string($_POST['fname']), 
            
mysql_real_escape_string($_POST['lname']), 
            
mysql_real_escape_string($_POST['email']), 
            
hash('sha256'mysql_real_escape_string($_POST['password'])))or die(mysql_error());
        
$sql mysql_query($query);
        
# Redireccion a la página de logueo despues del registro.
        
header("Location: users_Login.php"); 
        exit; 
    } 

if(isset(
$error)){ 
    echo 
$error
    unset(
$error); 

?>

y en el verify

Código PHP:
<?php 
include("db.php");
if(isset(
$_POST['submit'])){ 
    
$usr mysql_real_escape_string($_POST['usuario']); 
    
$pas hash('sha256'mysql_real_escape_string($_POST['password']));  
    
$sql mysql_query("SELECT * FROM usuarios  
        WHERE usuario='$usr' AND 
        password='$pas' 
        LIMIT 1"
); 
    if(
mysql_num_rows($sql) == 1){ 
        
$row mysql_fetch_array($sql); 
        
session_start(); 
        
$_SESSION['usuario'] = $row['usuario']; 
        
$_SESSION['fname'] = $row['fname']; 
        
$_SESSION['lname'] = $row['lname']; 
        
$_SESSION['logged'] = TRUE
        
header("Location: prueba.php"); // Puedes modificar la pagina a la cual te guste que valla despues del inicio de sesión
        
exit; 
    }else{ 
        
header("Location: incorrecto.php"); 
        exit; 
    } 
}else{ 
    
header("Location: index.php");     
    exit; 

?>

Pero aun sigue sin funcionar de echo la cadena que me coloca en la tabla es:
Tambien alargue los campos a 1000 para evitar que se corte cualquier cadena.


*445EFF55A75BF78FA56F407B5315B8269F311D85

y la clave que debería colocar en la tabla haciendo la conversión debería ser:

8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a8 1f6f2ab448a918
  #10 (permalink)  
Antiguo 26/05/2013, 15:42
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Autenticacion de usuarios

las funciones son exactamente iguales y deberian arrojar los mismos resultados ahora que ya esta implementado borra el registro de la bd , registrate nuevamente y logueate
  #11 (permalink)  
Antiguo 26/05/2013, 15:46
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Autenticacion de usuarios

OK OK esque estas cifrando el password en el registro PASSWORD('%s') POR eso no coinciden

Asi deberia de funcionar

Código PHP:
Ver original
  1. $query = sprintf("INSERT INTO usuarios(`usuario`,`fname`,`lname`,`email`,`password`)
  2.            VALUES('%s','%s','%s','%s','%s')",
  3.             mysql_real_escape_string($_POST['usuario']),
  4.             mysql_real_escape_string($_POST['fname']),
  5.             mysql_real_escape_string($_POST['lname']),
  6.             mysql_real_escape_string($_POST['email']),
  7.             hash('sha256', mysql_real_escape_string($_POST['password'])))or die(mysql_error());
  8.         $sql = mysql_query($query);
  #12 (permalink)  
Antiguo 26/05/2013, 15:52
 
Fecha de Ingreso: septiembre-2004
Ubicación: Maracay Edo. Aragua
Mensajes: 45
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Autenticacion de usuarios

listoooo amigo,, funciono a la perfeccion si en este foro se deja puntos dime como hago para dartelos por que de verdad fuiste de gran ayuda.....
De verdad gracias. problema solucionado.
  #13 (permalink)  
Antiguo 26/05/2013, 15:55
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Autenticacion de usuarios

de nada me alegro , puntos ? se dan como lo diste antes

Etiquetas: formulario, html, mysql, registro, select, sql, tabla, 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 21:43.