Login y creacion de sesiones con PHP y MySQL

Actualizado: Octubre 27 2018

Debido a la gran cantidad de personas que visitan este post.

Y a que algunas personas han tenido problemas implementando el código, he realizado algunas mejoras a la explicación de como cree todo.

También hice unas mejoras al código y a la interfaz de usuario (UI).

Como el proyecto tiene 5 archivos PHP y 2 HTML era mas difícil crear todas las paginas o estar con el Copy y Paste.

Así que, ahora pueden descargar o clonar el proyecto desde GitHub.

https://github.com/WilliamRiveraRamos/PHP-login

Ya no tienes que hacer referencia al post titulado  Formulario de Registro de Usuarios con PHP y MySQL , ahora todo esta en la carpeta PHP-login en GitHub.

 

La app fue creada con:

  • XAMPP con PHP 7.2.10 para Windows
  • phpMyAdmin
  • Bootstrap

 

Como crear la base de datos y la tabla:

 

  1. Abre XAMPP y "arranca" el Apache y el MySQL.
  2. Escribe localhost:8080 o 127.0.0.1:8080 en tu navegador.
  3. Abre phpMyAdmin.
  4. Crea una base de datos con el nombre phplogin.
  5. Crea una tabla con el nombre users y 4 campos (Id, Name, Email, Password).

 

Tabla users en phpMyAdmin

 

Recuerda colocar el campo Id en AUTO_INCREMENT y que el campo Password tenga una longitud de valores de 60 o mas.

El string que se guarda como password hash es de 60 caracteres.

Ahora descarga o clona la web app desde GitHub y colocala en tu carpeta htdocs en XAMPP.

https://github.com/WilliamRiveraRamos/PHP-login

Abre el navegador y entra http://localhost:8080/PHP-login-master/

PHP login index page

Entra un nombre, email y password y presiona Create my account.

El password se convierte en un hash y es enviado a la base de datos junto con el nombre y el email.

Confirma en la base de datos que Name, Email y Password se crearon y que el password se convirtió en un hash.

Has click en Login y entra el email y el password

PHP MySQL login page

Si todo esta bien, sale un mensaje de bienvenida y se crea una sesión por 1 minuto.

Tienes acceso por 1 minuto al archivo con acceso restringido edit-profile.php.

Después de 1 minuto la sesión termina y  ya no podrás permanecer o hacer cambios en la pagina edit-profile.php.

Si tratas de acceder la pagina, te saldrá un mensaje de error y necesitaras hacer login nuevamente.

Si presionas Logout antes del minuto e intentas acceder la pagina edit-profile.php te saldrá un mensaje de error.

Si alguien que nunca ha creado una cuenta intenta acceder el archivo edit-profile.php obtendrá un error.

Para restringir el acceso a las paginas, coloca el código PHP del archivo edit-profile.php en cada una de las paginas que deseas restringir o bloquear.

También coloca la función session_start(); exactamente al comienzo de cada pagina que deseas restringir.

<?php session_start(); ?>

Ahora analiza el código para comprender como funciona todo y puedas  editarlo a tu gusto.

Espero les sea útil. Gracias por leer, comentar y compartir!

 

Que sean bendecidos!

25 Responses

  1. En esta parte:

    if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true)

    no es necesario validar (==) si es true, ya que la variable se declaro como tal, y el bloque if, valida cuando es verdadero, saludos.

    • velozity

      Gracias por sus comentarios, tienes razon, no es necesario validar. Ese pedezo de codigo no es necesario. Gracias por aclarar el error.

  2. He seguido su código de forma exitosa, y de verdad que me ha sido sumamente útil, modifiqué solo algunas lineas pertenecientes a la ubicación de los archivos, pero el resto me servirá para todo lo relacionado a este lindo mundo informático, le agradezco infinitamente por estos códigos tan útiles.

  3. Hola, todo sale bastante bien (el usuario se crea, el nombre de usuario aparece en la tabla mysql y el password queda en hash), pero al ingresar el usuario y la contraseña me aparece “Username o Password estan incorrectos”… a pesar de que lo he intentado de distintas maneras no puedo dar con la solución.

    • Hola. saludos

      yo tuve el mismo problema, y le di muchas vueltas al código y encontré una solución, pueda que sea la misma.

      revisa el tamaño del campo de contraseña en la base de datos que sea de 60 caracteres…
      ¿porque 60 caracteres?
      porque cuando se crea el usuario y se encripta la contraseña se uso el método PASSWORD_BCRYPT que dara como resultado siempre un string de 60 caracteres. yo hice los cambios y me funciono.

      http://php.net/manual/es/function.password-hash.php

      saludos.

    • si pudiste dar con la solución?

    • Es problema de la longitud del campo en la BBDD. Seguramente habrás creado un varchar por defecto. Dale más caracteres. No te está guardando el hash completo.

  4. Buenisimo trabajo para el mundo gracias

  5. EXCELENTE LO FELICITO POR TAN BUEN TRABAJO. SALUDOS

  6. al aplicar el código redactado por usted y aplicarlo a mi proyecto me aparece un error en la linea 27 de checklogin.php haciendo una condición de comparación “if ($result->num_rows === 1)”, por favor resuelva me la duda

    • velozity

      Hola gracias por tus comentarios. Tienes razón hay un error del cual no me había percatado.

      • En la linea 27 cambia num_rows === 1 por num_rows > 0
      • Añade debajo de: $row = $result->fetch_array(MYSQLI_ASSOC); una llave de cierre (})
      • Y elimina la llave de cierre (}) que esta antes de: mysqli_close($conexion);

      Se supone que ahora te debe funcionar. Gracias!

      Te debe quedar algo asi…

      Screen Shoot Codigo Login Creacion de sesiones con PHP MySQL

  7. Mil gracias el mejor tutorial que encontré para hacer esto, Dios te bendiga!

    • velozity

      Muchas Gracias a ti! No sabes la alegría que me da saber eso. 🙂

  8. Gracias por tu aporte !!

    • velozity

      De nada, es un honor.

  9. Con que BD lo estas manejando seria muy bueno que pusieras la creación de ella, Saludos y gracias de antemano

    • velozity

      Hola y gracias por tus comentarios. Para no hacer el post muy complicado y largo la base de datos la cree previamente con PHPMyAdmin. No la hice con un script de PHP.

  10. Gracias por el aporte

  11. es la explicacion mas clara que he encontrado… gracias!!!!!!!!!!

  12. Nice!!! Gracias por el aporte…

  13. neo

    Será “su sesión Ha terminado’.

  14. Gracias, eso fue una gran ayuda, se te agradece amigo.

  15. Hola gracias por tomarte el tiempo de explicar estos pasos, mira segui tus consejo todo bien al momento pero quiero saber sobre el archivo “checklogin.php” como puede ubicar que en vez de que me imprima el usuario logueado me redirija a una pagina nueva en donde puede mostrar estos datos de session

  16. buenisimo…gacias por compartirlo…

  17. oyes despues qu la paginas ya estan bloqueadas. como le hago para desbloquearlas…. utilize tu codigo de restriccion de paginas . como le hago para despues de loguearme poder verlas

Leave a comment