Como validar si el usuario ingreso en sesión php msql
Quería consultar lo siguiente. Tengo una mini base de datos conectada con mysql con inicio de sesión por usuarios. Lo que necesitaría es saber si se puede conocer cuando un usuario ya ingreso o esta activo. Es decir, que pueda saltar un mensaje como "el usuario ya se encuentra conectado".
1 Respuesta
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.En la parte izquierda ahora nos aparecerá la base de datos que creamos, por lo que damos clic en ella y en la parte derecha nos preguntará si queremos crear una tabla. Colocamos el nombre de la tabla, colocamos el # de columnas (para el ejemplo, con 3 campos nos basta: Usuario, Clave y Estado) y damos clic en “Continuar”Ahora, colocamos el nombre de nuestros campos, el tipo de datos, la longitud y, en el caso del campo idusuario, le diremos que será llave primaria. Ver la siguiente imagen para mayor referencia.Ahora, bajamos mediante la barra vertical de la ventanita y damos clic en “Guardar” para crear nuestra tabla. Ahora, damos clic al botón “Insertar” para poder insertar un registro de prueba, y colocamos los nuevos valores (ver la imagen para mayor referencia) y finalmente damos clic en “Continuar”. Continuando con la programación en PHP… Ahora, crearemos el archivo app.phpqué, según se vió en el archivo anterior, es donde se direcciona cuando el usuario ha ingresado correctamente el usuario y contraseña.
<? 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.
Esperamos haberte ayudado y no olvides valorar las respuestas ;)
- Compartir respuesta
Gracias por compartir con nosotros este código. Me parece muy bueno, es la manera adecuada de hacerlo.Quiero preguntarte algo. Creo que tu respuesta aclararía una duda que tengo al respecto, de pronto tienes la solución:1. Que sucede si el usuario no sale adecuadamente cerrando la sesion sino que cierra el navegador?2. Habría una manera de detectar si se cierra el navegador sin cerrar la sesión?existe un sistema donde si se sale de una pantalla marca un mensaje. Pero es muy incómodo para los usuarios tener que confirmar que si desean salir (para otro sitio . link interno).Hay manera de detectar desde PHP cuando se cierra el navegador?gracias.siREZ - Roberto Escobar
A través de la IP desde donde se conecta el usuario se puede volver a abrir la sesión (similar a como hace facebook) - Crear Pagina Web