Control de usuarios en ASP y MySQL

Control de usuarios con ASP para una herramienta con base de datos MySQL. Verifica también que el usuario no esté autenticado ya en la aplicación.
Vamos a realizar un control de usuarios con ASP para una herramienta de código libre que está montada en php sobre base datos, en nuestro caso MySQL. Aunque dicha herramienta, llamada Moodle, está desarrollada en PHP, nuestro control de usuarios está desarrollado en ASP, porque nos viene mejor, estámos más familiarizados y porque nuestro servidor, montado sobre un sistema operativo Windows, soporta tanto PHP como ASP.

El control de usuario, realizado en asp, verifica que dentro de dicha herramienta no exista ningún usuario con el mismo nombre que el que se quiere conectar. Esto es útil, porque si un usuario realizar un ejercicio y otro entra en el sistema y realiza el mismo ejercicio se crearía un conflicto a la hora de guardar los cambios.

Lo primero que necesitamos es instalar un controlador MySQL OBDC (yo lo encontré en Internet, si mal no recuerdo en DriverGuide). En concreto, instalé la versión 3.51 del Driver ODBC. Utilizamos este controlador porque vamos a hacer la conexión a través de OBDC de los servidores Windows, pero estos no incluyen controladores para MySQL por defecto. (Los sistemas Windows suelen venir con los drivers de bases de datos como Access, SQL Server, etc.)

Referencia: En DesarrolloWeb.com se ha ofrecido información sobre el Driver ODBC para MySQL. Instalar el driver ODBC para conectar con una base de datos MySQL

La página de oficial donde se puede descargar y obtener más información del controlador ODBC para MySQL es http://www.mysql.com/products/connector/odbc/

Login.asp

La aplicación comienza con una página (login.asp) con un formulario que incluye un cajón donde escribir el login del usuario. Al hacer clic en el botón enviar, nos redirecciona al control de usuarios.

<%@ Language=VBScript %>
<html>
<head>
  <title>Control de usuarios</title>

  <base target="bienvenida">

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFF99" text="#333333">
<form method=post action=verify.asp >
<div align="center"><strong>Introduzca el nombre de usuario</strong> </div>
<p align="center"><strong> &nbsp;&nbsp;LOGIN: </strong>
 <input name=login type=text size="12">
 <br>
 <br></fomr>
  
 <input type=submit value="Enviar" name="Enviar">
 </p>
</body>
</html>

Verify.asp

En esta página se encuentra el verdadero control de usuarios

<%conn_string="DSN=moodle;User=root;Password=xxxxxx"
set conn = server.CreateObject("ADODB.Connection")
conn.Open conn_string
strQuery = "SELECT username, id, lastaccess FROM mdl_user"
Set RS = conn.Execute(strQuery)
%>

El nombre de la base de datos es moodle. También debemos indicar cual es el nombre del usuario y el password. Realizamos una select sobre la tabla mdl_user obteniendo el nombre de usuario, su id y su lastacces, datos que usaremos posteriormente.

<% usuario=request.form("login")%>
<%while not RS.eof%>
   <%if usuario=RS("username") then%>
   <%idusuario=RS("id")%>
   <%lastaccess=Rs("lastaccess")%>
   <%acceso=1%>
   <%end if %>
<%RS.MoveNext%>
<%wend%><br>
<%conn.close%>

Desde otra página que incluye un formulario enviamos el nombre del usuario que se guardará en la variable usuario.
A continuación se hace una comprobación del nombre del usuario, para saber si existe y se obtiene su id (único en la base de datos) así como el instante del último acceso a la aplicación, lastacces

<%conn_string2="DSN=moodle;User=root;Password=xxxxxx"
set conn2 = server.CreateObject("ADODB.Connection")
conn2.Open conn_string2
strQuery2 = "SELECT userid,timeaccess FROM mdl_user_students "
Set RS2 = conn2.Execute(strQuery2) %>
<%while not RS2.eof%>
   <%if RS2("userid")=idusuario then%>
   <%timeaccess=RS2("timeaccess")%>
   <%end if%>
<%RS2.MoveNext%>
<%wend%><br>

<%conn2.close %>

En un Segundo acceso a la base de datos, en este caso a la tabla mdl_user_students obtenemos para el usuario cuyo id obtuvimos con anterioridad el timeacces

   <%if acceso=0 then %>

   <%response.Redirect("aviso.html")%><br>

   <%elseif timeaccess<>0 and timeaccess=lastaccess and acceso=1 then%>
   <%response.redirect("error.asp")%>

   <%else%>
   <%response.redirect("/escuelavirtual/index.php")%>

   <%end if%>
</body>
</html>

Finalmente, cuando la variable acceso=0 (inicialmente la habíamos inicializado a 1) es que no se encontró el usuario o este no existe y nos manda a la página aviso.html que emite un aviso de error

Si acceso =1 y tmieacces=lastacces implica que ya existe un usuario dentro del sistema con ese nombre y por tanto se deniega la entrada reenviándonos a otra página de error.

Finalmente, si no se da ninguna de las otras opciones, el usuario es correcto y nos reenvía a la página donde se inicia la aplicación.

Compartir

Comentarios

Pablo

24/1/2006
Creo q este script está MUY incompleto. Faltan muchos detalles...como por ejemplo controlar cuando un usuario sale de la aplicación para "liberar" ese usuario...en fin, creo q el que esté buscando un script similar poco debería de fiarse de este artículo.

cblaarc

25/11/2006
Es cierto lo que decís. Esto puede complicar un poco más las cosas. Si un usuario sale de la aplicación, al querer entrar aparecerá como bloqueado. Solución. Añadir un botón en la aplicación que ejecuta una salida ordenada y correcta (cosa que se hizo).
Si aún así los usuarios salen cerrando el navegador se implementó un control de bloqueos que muestra todos aquellos usuarios que se encuentran bloqueados y luego nos permite desbloquearlos.
Nuestro problema era y es el evitar que varios usuarios conectados con el mismo nombre realicen el mismo ejercicio, machacándose el ejercicio y las notas. El problema se soluciona y de paso se controlan acceso no deseados.