Realizamos una mejora al sistema de autentificación con ASP para que puedan acceder múltiples usuarios, cada uno con unos datos de acceso distintos.
Vamos a ver las páginas ASP que necesitaríamos para realizar un acceso
restringido por clave y contraseña para múltiples usuarios, donde cada uno tenga
unos datos de acceso propios.
| Nota:Este artículo viene a complementar el manual Sistema Autentificación
en ASP. De hecho, en este artículo sólo vamos a tratar la página que
recoge los datos del usuario (su nombre y contraseña) y comprueba si son
correctos, redireccionando a la aplicación segura (si los datos se
corresponden con algún usuario de la base de datos), o a la página de
entrada (si los datos no correspondían con ningún usuario
registrado). |
Lo primero es recordar el esquema de páginas del sistema de autentificación propuesto. Lo podemos ver
en el artículo
Funcionamiento del sistema de autentificación
en ASP. Nosotros vamos a tratar de colocar aquí un código para la página "compruebo datos"
La base de datos
La base de datos que vamos a utilizar contendrá una tabla para los usuarios, donde cada uno dispondrá, al menos, de dos campos: un nombre de usuario y una contraseña, los dos de tipo texto.
| Tabla usuario |
| Nombre del campo |
Tipo del campo |
| nombre_usuario |
Texto |
| clave_usuario |
Texto |
En una base de datos de usuarios, el nombre de usuario debería ser un valor único, irrepetible para otro usuario, es decir, no podremos tener dos usuarios con el mismo nombre. Por esta razón, el campo nombre_usuario podría ser la clave principal de la tabla, aunque también podríamos haber creado un campo adicional, llamado por ejemplo id_usuario, de tipo autonimérico y colocarlo como clave principal.
Para conseguir no insertar dos usuarios con el mismo nombre de usuario, a la hora de insertarlos en la tabla, comprobaremos que no haya ningún usuario ya introducido con el nombre de usuario que se pretende insertar. Este paso, aunque importante, no lo vamos a ver, pues sólo nos vamos a centrar en decidir si un usuario puede entrar o no en la aplicación, suponiendo que los usuarios se encuentran ya insertados en la base de datos.
En el ejemplo suponemos que utilizamos una base de datos Access, sin embargo, cualquier tipo de base de datos podrá servir para unos objetivos como los que nos proponemos. Para sistemas Microsoft, las bases de datos más habituales son la mencionada Access (recomendable si el sitio web tiene pocas consutas al mismo tiempo) y SQL Server, que ofrece potencia suficiente para los entornos más exigentes.
El
funcionamiento del script
El script que se utilizará para decidir si un usuario puede o no entrar en la aplicación es muy sencillo. Simplemente hace una llamada a la base de datos para comprobar si los datos de autentificación escritos por el visitante (usuario y contraseña) corresponden con los de algún usuario. En caso de que así sea, se permite la entrada y de no ser así, se deniega.
Lo primero sería abrir una conexión con la base de datos, seleccionar la base con la que hemos de trabajar y ejecutar una sentencia de selección del usuario que corresponda con los datos de autentificación introducidos.
' miro a ver si la autentificacione es correcta
'creo una sentencia SQL con los datos recibidos
ssql = "select * from usuarios_autentificacion where nombre_usuario='" & request.form("usuario") & "' and clave_usuario='" & request.form("contrasena") & "'"
'conecto y extraigo de la base de datos
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "base_autentificacion"
set RS = Conn.Execute(sSQL)
Si esa sentencia SELECT responde con algún registro encontrado, sabremos que existe un usuario donde sus datos de autentificación corresponden perfectamente con los introducidos. En ese caso podremos realizar las acciones encaminadas a permitir el acceso. Por el contrario, si la sentencia SELECT no encuentra ningún registro, sabremos que no existe un usuario con los datos de autentificación introducidos y por lo tanto, deberemos realizar las acciones encaminadas a restringir el acceso.
if (not RS.eof) then
'Como se ha localizado un registro es que ese usuario existe y su contraseña es correcta
'coloco las variables de sesion
session("autentificado") = "si"
'redirecciono a la página de la aplicación
response.redirect "aplicacion.asp"
else
response.redirect "index.asp?errorusuario=si"
end if
'cierro la conexion con base de datos
Conn.Close
Las acciones para restringir o permitir el acceso son exatamente iguales a las que veníamos utilizando en el script de control sin utilizar la base de datos. Así que no vamos a comentarlas más, sino que os referimos al
artículo donde las explicamos.
El código completo del ejemplo sería el siguiente.
<%
' miro a ver si la autentificacione es correcta
'creo una sentencia SQL con los datos recibidos
ssql = "select * from usuarios_autentificacion where nombre_usuario='" & request.form("usuario") & "' and clave_usuario='" & request.form("contrasena") & "'"
'conecto y extraigo de la base de datos
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "base_autentificacion"
set RS = Conn.Execute(sSQL)
if (not RS.eof) then
'Como se ha localizado un registro es que ese usuario existe y su contraseña es correcta
'coloco las variables de sesion
session("autentificado") = "si"
'redirecciono a la página de la aplicación
response.redirect "aplicacion.asp"
else
response.redirect "index.asp?errorusuario=si"
end if
'cierro la conexion con base de datos
Conn.Close
%>
Nota: Es importante destacar que esta página no debería contener ningún tipo de texto antes de la apertura de código ASP, ni tan siquiera saltos de línea. Esto es debido a que al final se realiza una redirección y este tipo de instrucciones solamente se puede ejecutar si no se ha escrito todavía ningún carácter en el cuerpo.
No obstante, en la mayoría de las versiones de ASP no encontraremos ese error porque la página no se envía al navegador hasta que no se termina de ejecutar en el servidor, y así, si se hace un redirect habiendo escrito texto antes, no se llegaría a mandar ningún texto sino que se mandaría la orden de redirección.
Todo esto está contado con más detalle en el artículo Redirigir al navegador a una URL con ASP al detalle.
|
Se puede descargar este sistema de autentificación, junto con la base de datos utilizada, en
un fichero comprimido. No obstante, recordar que para ponerlo en marcha no basta solo con descomprimirlo, sino que habrá que colocarlo en el directorio de publicación de nuestro servidor web preparado para ASP y crear el DSN de la base de datos en el panel de control del servidor. Todo esto se explica con detalle en nuestro
Manual de ASP.