+ Reply to Thread
Page 1 of 4 123 ... LastLast
Results 1 to 10 of 40

Thread: [TUTORIAL] Crear un sistema de usuarios básico completo

  1. #1
    eZakto is offline x10 Lieutenant eZakto is an unknown quantity at this point
    Join Date
    May 2006
    Location
    Salta, Argentina.
    Posts
    394

    [TUTORIAL] Crear un sistema de usuarios básico completo

    Al ver muchas dudas de lo mismo en otros foros, supongo que quizá ayude a alguien aquí ;)

    Registro de Usuarios / Login con php.

    Vemos en muchos portales, foros, blogs, etc. lo mismo: Registro y login de usuarios, ¿y a quién no se le ha cruzado la idea de implementar eso en su web? Cuando no utilizamos un CMS, tenemos que buscar/programar nuestro propio sistema de usuarios, cosa que a pesar de parecerlo, no es difícil.

    Comenzando...
    Primero debemos saber qué datos necesitará nuestro usuario para registrarse. Lo más usual es nombre de usuario, contraseña y mail. Comenzaremos creando una base de datos MySQL (O usando una que tengamos creada ya, a gusto) y añadiendo una nueva tabla, que llamaremos sys_users. La tabla tendrá 4 campos: id, user, pass, mail. Donde id será int(32), y el resto tinytext. Puedes crearla manualmente ó automáticamente ejecutando la siguiente sentencia sql:
    Code:
    CREATE  TABLE `sys_users` ( `id` INT( 32  )  UNSIGNED NOT  NULL  AUTO_INCREMENT  PRIMARY  KEY ,
     `user` TINYTEXT NOT  NULL ,
     `pass` TINYTEXT NOT  NULL ,
     `mail` TINYTEXT NOT  NULL 
    ) ENGINE  =  MYISAM
    Bien. Eso habrá creado una tabla con los 4 campos, asignando al campo id como campo primario y de auto-incremento (Es decir, no será necesario especificar un valor para este campo por cada usuario, se asignará solo).

    El formulario
    Ya teniendo la tabla en nuestra base de datos, es necesario hacer el formulario por el cual los usuarios ingresarán sus datos para registrarse, para luego insertarlos. Esta es la parte más sencilla. Haremos un formulario que envíe los datos a reg.php por medio del método POST, y que conste de 4 campos: Usuario, contraseña, confirmar contraseña, mail.
    HTML Code:
    <form method="post" action="reg.php">
      Usuario:<br />
      <input type="text" name="r_user" /><br />
      Contraseña:<br />
      <input type="password" name="r_pass" /><br />
      Confirmar contraseña:<br />
      <input type="password" name="r_pass_c" /><br />
      Mail:<br />
      <input type="text" name="r_mail" /><br />
      <br />
      <input type="submit" value="Registrarse" />
    </form>
    Hay que prestar atención al nombre de cada campo (El atributo 'name'), porque ese será el nombre del elemento cuando lo manipulemos con php. Bien, ahora pasamos al código php.

    El archivo reg.php
    Este archivo, al que se le enviarán las variables, constará de 3 partes: Comprobación, ejecución y confirmación (Que lindo ha quedado :P ). En la primera parte, nos aseguraremos de que se compruebe que los datos son correctos, en la segunda, añadiremos los usuarios a la base de datos, y en la tercera mostraremos el mensaje de éxito.
    Comenzamos con la comprobación:
    PHP Code:
    <?php
    // Primero, transformamos los datos recibidos en entidades html para evitar inyecciones sql
    $r_user htmlentities($_POST['r_user'], ENT_QUOTES);
    $r_pass htmlentities($_POST['r_pass'], ENT_QUOTES);
    $r_pass_c htmlentities($_POST['r_pass_c'], ENT_QUOTES);
    $r_mail htmlentities($_POST['r_mail'], ENT_QUOTES);

    // Comprobamos que se haya escrito un nombre de usuario
    if($r_user != "") {
      
    // Ahora comprobamos lo mismo para el mail
      
    if($r_mail != "") {
        
    // Para la contraseña... {
        
    if($r_pass != "") {
          
    // Bien, ahora comprobaremos que las 2 contraseñas escritas sean iguales:
          
    if($r_pass === $r_pass_c) {
            
    /* Todo comprobado. Aquí irá el código de ejecución.
            Pero antes, cerraremos los ifs con el mensaje de error */
          
    } else {
            echo 
    'Las contraseñas ingresadas no coinciden.<br /><a href="history.back();return false;"<< Atrás</a>';
          }
        } else {
          echo 
    'Debes ingresar una contraseña.<br /><a href="history.back();return false;"<< Atrás</a>';
        }
      } else {
        echo 
    'Debes ingresar una dirección de correo electrónico.<br /><a href="history.back();return false;"<< Atrás</a>';
      }
    } else {
      echo 
    'Debes ingresar un nombre de usuario.<br /><a href="history.back();return false;"<< Atrás</a>';
    }
    ?>
    Ahora pasamos al centro de los ifs, donde ha quedado el espacio para la ejecución. Simplemente habrá que ejecutar una sentencia sql y mostrar el mensaje de confirmación. Veamos:
    PHP Code:
    <?php
    // Primero, transformamos los datos recibidos en entidades html para evitar inyecciones sql
    $r_user htmlentities($_POST['r_user'], ENT_QUOTES);
    $r_pass htmlentities($_POST['r_pass'], ENT_QUOTES);
    $r_pass_c htmlentities($_POST['r_pass_c'], ENT_QUOTES);
    $r_mail htmlentities($_POST['r_mail'], ENT_QUOTES);

    // Comprobamos que se haya escrito un nombre de usuario
    if($r_user != "") {
      
    // Ahora comprobamos lo mismo para el mail
      
    if($r_mail != "") {
        
    // Para la contraseña... {
        
    if($r_pass != "") {
          
    // Bien, ahora comprobaremos que las 2 contraseñas escritas sean iguales:
          
    if($r_pass === $r_pass_c) {
            
    // Todo comprobado.
            // Encriptamos la contraseña para alta seguridad:
            
    $enc_pass md5($r_pass);
            
    // Ejecutamos la sentencia
            
    mysql_query("INSERT INTO sys_users(user,pass,mail) VALUES('{$r_user}','{$enc_pass}','{$r_mail}')");
            
    // Ahora mostramos la confirmación:
            
    echo 'Te has registrado con éxito. Ahora puedes iniciar sesión con tu usuario y contraseña';
          } else {
            echo 
    'Las contraseñas ingresadas no coinciden.<br /><a href="history.back();return false;"<< Atrás</a>';
          }
        } else {
          echo 
    'Debes ingresar una contraseña.<br /><a href="history.back();return false;"<< Atrás</a>';
        }
      } else {
        echo 
    'Debes ingresar una dirección de correo electrónico.<br /><a href="history.back();return false;"<< Atrás</a>';
      }
    } else {
      echo 
    'Debes ingresar un nombre de usuario.<br /><a href="history.back();return false;"<< Atrás</a>';
    }
    ?>
    Y así es como hemos logrado un sistema simple de usuarios. Claro que se pueden agregar muchas más comprobaciones avanzadas, como comprobar la sintaxis del mail (Que contenga @ y punto, etc), que el usuario/contraseña sea de más de 3 carácteres, que el usuario no exista antes, envío de correo de activación de cuenta y demás. Pero eso será para otro día :P

    (Segunda parte abajo)
    Last edited by eZakto; 01-19-2008 at 10:25 AM.

  2. #2
    eZakto is offline x10 Lieutenant eZakto is an unknown quantity at this point
    Join Date
    May 2006
    Location
    Salta, Argentina.
    Posts
    394

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    Ahora viene la parte más interesante. Iniciar sesión y proteger páginas. Let's see...

    Inicio de sesión
    Comenzaremos creando un formulario más simple que el de registro, usuario y contrasela. Que envíe los datos a login.php.
    HTML Code:
    <form method="post" action="login.php">
      Usuario:<br />
      <input type="text" name="l_user" /><br />
      Contraseña:<br />
      <input type="password" name="l_pass" /><br />
      <br />
      <input type="submit" value="Iniciar sesión" />
    </form>
    Fácil, ¿no? Bien, ahora el archivo login.php:

    PHP Code:
    <?php
    // Primero, transformamos los datos recibidos en entidades html para evitar inyecciones sql
    $l_user htmlentities($_POST['l_user'], ENT_QUOTES);
    $l_pass htmlentities($_POST['l_pass'], ENT_QUOTES);
    // Ahora creamos una sentencia sql en busca del usuario ingresado:
    $select mysql_query("SELECT * FROM sys_users WHERE user='{$l_user}'");
    // Ahora comprobamos que el usuario exista.
    if(mysql_num_rows($select) != 0) {
      
    // Bien, ahora que sabemos que existe, creamos un bucle para obtener los datos...
      
    while($row mysql_fetch_array($select)) {
        
    /* Ahora con los datos obtenidos, comprobamos que la contraseña sea correcta.
        Hay que recordar que la contraseña guardada está encriptada y no se puede desencriptar.
        Para hacer la comprobación, encriptamos la nueva contraseña y la comparamos con la guardada */
        
    if(md5($l_pass) == $row['pass']) {
          
    // En caso de que esté correcto, establecemos la sesión como iniciada. Para ello, usamos cookies.
          
    setcookie('session'md5($row['user'] . $row['pass']), time()+3600);
          
    // También creamos una cookie con la id del usuario...
          
    setcookie('session_id'$row['id'], time()+3600);
          
    // El contenido de la cookie es usuario+contraseña encriptados, y durará una hora.
          // Ahora cerramos los ifs, con sus respectivos mensajes opuestos.
        
    } else {
          echo 
    'Usuario encontrado, pero la contraseña es incorrecta.<br /><a href="history.back();return false;"<< Atrás</a>';
        }
        
    // La siguiente llave cierra el bucle while, no necesita else.
      
    }
    } else {
      echo 
    'El usuario no existe.<br /><a href="history.back();return false;"<< Atrás</a>';
    }
    ?>
    Ya tenemos nuestro login. ¿Qué más? Listo, esto está terminado...
    No molesten...
    Dije que no...
    Ok, hagamos el logout para completar esto.

    Cerrar sesión
    Para cerrar la sesión, simplemente nos aseguramos de que las cookies que hemos insertado hayan caducado. Para esto, las "sobreescribimos" y modificamos su fecha límite a una fecha pasada. Bastará con un enlace al archivo logout.php para esto.
    logout.php:
    PHP Code:
    <?php
    // Comprobamos que haya alguna sesión iniciada.
    if($_COOKIE['session']) {
      
    // Ahora sobreescribimos las cookies.
      
    setcookie('session''dada'time()-3600);
      
    setcookie('session_id''dada'time()-3600);
      
    // Mensaje de confirmación.
      
    echo 'Sesión cerrada exitosamente.';
    }
    ?>
    El contenido de las cookies modificada no importa, pues se eliminarán instantáneamente.

    Bien... Ahora terminamos esto al fin con la función para proteger páginas. La siguiente función php debe ser incluida por las páginas protegidas.
    PHP Code:
    <?php
    function isonline() {
      
    // Comprobamos que existan las cookies..
      
    if($_COOKIE['session'] && $_COOKIE['session_id']) {
        
    // Transformamos las cookies en entidades html para evitar inyecciones sql
        
    $session htmlentities($_COOKIE['session'], ENT_QUOTES);
        
    $session_id htmlentities($_COOKIE['session_id'], ENT_QUOTES);
        
    // Armamos con la id guardada la sentencia sql para buscar el usuario.
        
    $find mysql_query("SELECT * FROM sys_users WHERE id='{$session_id}'");
        
    // Comprobamos que el usuario exista.
        
    if($mysql_num_rows($find) != 0) {
          
    // Armamos el bucle para obtener la información del usuario..
          
    while($row mysql_fetch_array($find)) {
            
    // Comprobamos que la cookie 'session' coincida con los datos guardados..
            
    if(md5($row['user'] . $row['pass']) == $_COOKIE['session']) {
              
    // Devolvemos true.
              
    return 1;
            }
          }
        }
      }
    }
    ?>
    Ok. Ahora, para proteger una página, debemos llamar la función dentro de una comprobación. Antes de mostrar el contenido oculto, escribimos esto:
    PHP Code:
    <?php
    if(isonline()) {
    ?>
    Escribimos todo el contenido privado, y finalmente cerramos el if:
    PHP Code:
    <?php
    }
    ?>
    También podemos agregar un else con un cartel que diga que es necesario iniciar sesión.

    Eso es todo, amigos. No he probado nada del tutorial, lo he escrito así simplemente. Si encuentran algún error, agradecería que me lo dijeran ;)
    Que quede claro que esto es algo básico y quizá algo inseguro, pero es solamente para que se den una idea, mejorarlo queda en ustedes :P

    Saludos.
    Last edited by eZakto; 01-19-2008 at 10:29 AM.

  3. #3
    ZharkD's Avatar
    ZharkD is offline Retired ZharkD is an unknown quantity at this point
    Join Date
    Jan 2008
    Location
    MX
    Posts
    5,914

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    muy buen aporte ^^ se agradece XD

  4. #4
    Perucho is offline x10Hosting Member Perucho is an unknown quantity at this point
    Join Date
    Feb 2008
    Posts
    19

    Talking Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    1. Registro de usuarios.

    DESCARGAR

    Un sistema de usuarios permite ofrecer privilegios a los usuarios de tu web, los cuáles sólo podrán disfrutar al registrarse. Con esto consigues un mayor control sobre tus usuarios y mayor seguridad cuando de subir contenidos a tu web se trata, por ejemplo formularios de envio de noticias, archivos, entre otros.

    Este sistema comprueba si el usuario está registrado y si ha iniciado sesión, si todo es correcto se le permite el acceso a la página, en caso contrario se le negará el acceso, para esto sólo debes agregar un código al principio de cada página que desees proteger.

    El sistema funciona con 4 archivos que son los siguientes:

    - uregistrar.php
    - uentrar.php
    - ulogin.php
    - usalir.php

    - uregistrar.php
    En esta página se mostrará un formulario al usuario para que pueda registrarse, los datos básicos que se le piden son 3: nick, contraseña y email, a su vez, este archivo guardará la información en la base de datos, con lo que el usuario estará registrado.

    - uentrar.php
    Aquí se procesará la información de inicio de sesión, se comprobará que el nick exista y que la contraseña sea correcta, si todo salió bien se crearán las cookies (más información de Cookies en Tutoriales) necesarias para mantener identificado al usuario en la web.

    - ulogin.php
    Este es el archivo más importante y deberá ser incluído dentro de cada página protegida con el siguiente código:

    PHP Code:
    <? require 'ulogin.php' ?>
    Este archivo comprobará los datos almacenados en las cookies y buscará si estos datos coinciden con los de la base de datos. Si los datos son incorrectos o si por alguna razón has eliminado al usuario de la base de datos, se le negará el acceso al usuario.

    - usalir.php
    Este archivo elimina las cookies del usuario con lo que queda cerrada la sesión.

    Para usar el registro de usuarios es muy sencillo, primero debes crear la tabla "usuarios" en tu base de datos pegando este código en la casilla SQL de tu phpMyAdmin:

    Code:
    create table usuarios ( 
    id smallint(5) unsigned not null auto_increment, 
    fecha int(10) unsigned not null, 
    nick varchar(20) not null, 
    contrasena varchar(32) not null, 
    email varchar(40) not null, 
    pais varchar(20) not null, 
    edad tinyint(2) unsigned not null, 
    sexo enum('0','1') not null, 
    descripcion tinytext not null, 
    web varchar(100) not null, 
    ip varchar(15) not null, 
    primary key (id), 
    key (nick,contrasena) 
    )
    Después sube los archivos en el directorio raíz de tu web (el directorio raíz es la primer carpeta que se abre cuando accesas a tu web ya sea por FTP o por WebFTP).

    Por último, sólo pega el siguiente código en alguna parte de tu web donde deseas que tus usuarios inicien sesión, de preferencia en la página principal:

    PHP Code:
    <?
    if(!$_COOKIE[uid]) {
    ?>
    <form method="post" action="uentrar.php">
    <b>Nick:</b><br>
    <input type="text" name="nick" maxlength="20"><br>
    <b>Contraseña:</b><br>
    <input type="password" name="contrasena" maxlength="20"><br><br>
    <input type="submit" name="enviar" value="Iniciar Sesión">
    </form>
    <p><a href="uregistrar.php">Nuevo usuario</a>
    <?
    }
    else {
    ?>
    Bienvenid@ <b><?=$_COOKIE[unick]?></b><br><br>
    <a href="pagina_protegida1.php">Enlace 1</a><br>
    <a href="pagina_protegida2.php">Enlace 2</a><br>
    <a href="pagina_protegida3.php">Enlace 3</a><br><br>
    <a href="usalir.php">Salir</a>
    <?
    }
    ?>
    Este código mostrará un formulario y un enlace para los usuarios que deseen iniciar sesión o registrarse respectivamente. Si el usuario inicia sesión, automáticamente aparecerá un mensaje de bienvenida con los enlaces a las páginas restringidas sólo para usuarios registrados, es primordial que cada página protegida incluya el archivo ulogin.php tal como se indica más arriba, o cualquier usuario no registrado podrá entrar a estas páginas.

    Este tutorial me sirvió mucho para empezar, fue tomado de Electros.Tk

  5. #5
    gothcrow's Avatar
    gothcrow is offline x10 Lieutenant gothcrow is an unknown quantity at this point
    Join Date
    Oct 2007
    Location
    Bogotá - Colombia
    Posts
    309

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    Gracias!, muy util para implementarlo en webs de modo rapido
    Gana Dinero | Earn Money
    - BUX3

    ¿Has encontrado mi post útil? Si es asi, has click en el botón . O has click aqui

    Did you find my post helpful, amusing, useful, or otherwise enjoyable?
    Click the button. Or click here

  6. #6
    Kansy's Avatar
    Kansy is offline Community Advocate Kansy is an unknown quantity at this point
    Join Date
    Oct 2006
    Location
    Cork Cirty, Ireland
    Posts
    2,621

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    Se merece un sticky.
    Si consideras que esto ha sido de ayuda, por favor no dudes en darme reputación usando el que encontrarás abajo a la izquierda del tema.

  7. #7
    Rey_Lich's Avatar
    Rey_Lich is offline x10 Sophmore Rey_Lich is an unknown quantity at this point
    Join Date
    Dec 2006
    Posts
    147

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    Mushisimas gracias a los dos (aunque creo que en todo caso uso el de perucho)

  8. #8
    he_tiiitox is offline x10Hosting Member he_tiiitox is an unknown quantity at this point
    Join Date
    Feb 2008
    Posts
    2

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    MUCHAS GRACIAS POR LA INFORMACION Y LOS ARCHIVOS...... se que hay que ser un tonto para no saber aplicarlos........ pero o soy nuevo en php..... y tengo unas dudas..... todos dicen crear una base de datos.. pero como la creo? como hacer para que eso se conecte a mi base de datos? y que tiene que ver sql? porfavor agregame para que me pudas ayudar xq he tenido muchos problemas y quiero crear uno ya!....
    titin7771@hotmail.com

    GRACIASA

  9. #9
    eZakto is offline x10 Lieutenant eZakto is an unknown quantity at this point
    Join Date
    May 2006
    Location
    Salta, Argentina.
    Posts
    394

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    La base de datos se crea con, por ejemplo, phpMyAdmin. SQL es el lenguaje con el que se manejan las bases de datos SQL...

    La mayoría de tus preguntas las encontrarás en http://www.php.net/

    Saludos.

  10. #10
    he_tiiitox is offline x10Hosting Member he_tiiitox is an unknown quantity at this point
    Join Date
    Feb 2008
    Posts
    2

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo

    men te prometo qe para mi es muy dificil todo esto y nesecito ayuda detallada porfavor agregame a mi msn.... lo nesecito de verdad titin7771@hotmail.com.
    GRACIAS

+ Reply to Thread
Page 1 of 4 123 ... LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
x10hosting free hosting for the masses
dedicated servers