Quiero compartir una forma práctica y sencilla para poder crear un inicio de sesión, controlar las sesiones o, quizás más práctico decir, Crear una autenticación de usuarios, utilizando la tecnología LAMP (Linux, Apache, MySQL y PHP) en un sitio web dinámico mediante PHP. Para la instalación de LAMP en Ubuntu, remitirse a éste post…
Bien, como sabrán los archivos php que veremos a continuación se deberán de copiar en la carpeta donde Apache permite las publicaciones de las páginas web. Para el caso de haber hecho la instalación en Ubuntu, generalmente la dirección es: /var/www
Si utiliza tecnología como XAMPP en Windows, los archivos se deberían de copiar en c:\xampp\htdocs.
Lo primero es, crear nuestro archivo index.php, el cual será el primer archivo que se invoque para nuestro inicio de sesión. Prácticamente es puro HTML por lo que no se explicará mucho al respecto. Se dejó lo más sencillo posible para efectos didácticos.
<html> <head> <title>Inicio de sesión</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <form action="control.php" method="post" id="form"> <br> Usuario: <input type="text" name="usuario" id="usuario" /> <br> Clave: <input type="password" name="clave" id="clave" /> <br> <input type="submit" value="Entrar"> </form> </body> </html>
Como se ve en el archivo index.php, el <form> direcciona al archivo control.php el cuál sería el archivo encargado de realizar la validación del usuario y contraseña ingresado. A continuación, se muestra el archivo control.php
<? /* A continuación, realizamos la conexión con nuestra base de datos en MySQL */ $link = mysql_connect("localhost","root","123456"); mysql_select_db("base_datos", $link); /* El query valida si el usuario ingresado existe en la base de datos. Se utiliza la función htmlentities para evitar inyecciones SQL. */ $myusuario = mysql_query("select idusuario from usuarios where idusuario = '".htmlentities($_POST["usuario"])."'",$link); $nmyusuario = mysql_num_rows($myusuario); //Si existe el usuario, validamos también la contraseña ingresada y el estado del usuario... if($nmyusuario != 0) { $sql = "select idusuario from usuarios where estado = 1 and idusuario = '".htmlentities($_POST["usuario"])."' and clave = '".md5(htmlentities($_POST["clave"]))."'"; $myclave = mysql_query($sql,$link); $nmyclave = mysql_num_rows($myclave); //Si el usuario y clave ingresado son correctos (y el usuario está activo en la BD), creamos la sesión del mismo. if($nmyclave != 0) { session_start(); //Guardamos dos variables de sesión que nos auxiliará para saber si se está o no "logueado" un usuario $_SESSION["autentica"] = "SIP"; $_SESSION["usuarioactual"] = mysql_result($myclave,0,0); //nombre del usuario logueado. //Direccionamos a nuestra página principal del sistema. header ("Location: app.php"); } else{ echo"<script>alert('La contrase\u00f1a del usuario no es correcta.'); window.location.href=\"index.php\"</script>"; } } else { echo"<script>alert('El usuario no existe.'); window.location.href=\"index.php\"</script>"; } mysql_close($link); ?>
Como podemos apreciar del código (muy sencillo por cierto) hacemos una validación de la información ingresada por el usuario (usuario y contraseña) contra la información que están en la base de datos, para así finalmente, si todo esta bien, se direcciona a la aplicación principal; sino, muestra un mensaje de alerta indicando el problema. Ahora, no hemos hablado de la base de datos, por lo que a continuación realizaremos la creación de la misma y crearemos la tabla de usuarios (sencilla). Lo primero, es entrar a PHPMyAdmin así: http://localhost/phpmyadmin Nos autenticamos con nuestro usuario y contraseña y, una vez adentro, se da clic en «Base de Datos» para luego agregar el nombre de nuestra base de datos y damos clic en Crear.
<? include("seguridad.php"); ?> <html> <head> <title>App</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <h1>Bienvenido al sistema!</h1> <h2>Usuario: <? echo $_SESSION["usuarioactual"] ?> </h2><br> <p>Entro correctamente al sistema.</p><br><br> <a href="salir.php">Salir</a> </body> </html>
Pongamos atención a la primera línea… Estamos incluyendo a la página un archivo php específico el cuál éste validará si existe una sesión válida para poder mostrar la página. Si el archivo seguridad.php determina que existe una sesión válida, se termina de mostrar la página. Véase también la línea en donde está el código: echo $_SESSION[«usuarioactual»] ; Con ésto estamos mostrando el nombre del usuario que se autenticó. Dejamos un vínculo al archivo salir.php el cual es el encargado de terminar la sesión activa del usuario. Veamos el contenido del archivo seguridad.php
<? //Reanudamos la sesión @session_start(); //Validamos si existe realmente una sesión activa o no if($_SESSION["autentica"] != "SIP") { //Si no hay sesión activa, lo direccionamos al index.php (inicio de sesión) header("Location: index.php"); exit(); } ?>
Aqui vemos la parte de seguridad de éste sistema… Si alguien mal intencionado quisiera entrar, sin pasar por el inicio de sesión, a app.php, como existe una validación mediante el archivo seguridad.php, automáticamente se le redireccionará al inicio de sesión. Mientras no haya un inicio de sesión correcto, no se puede mostrar el archivo app.php, por lo que todas las páginas que creamos del sistema deberán de tener el include(«seguridad.php») para que así valide si realmente el usuario está autenticado. Finalmente, veamos el archivo salir.php
<? //Reanudamos la sesión session_start(); //Literalmente la destruimos session_destroy(); //Redireccionamos a index.php (al inicio de sesión) header("Location: index.php"); ?>
Y así cerramos la sesión. Si bien es cierto no es la mejor forma de autenticación que existe en el mundo PHP, es la más sencilla a mi criterio y pues se sigue implementando.
A continuación, las capturas de pantalla de ésta mini aplicación web:
Puede descargar los archivos de ejemplo AQUIII.
Comentarios por Facebook
comentarios