Con un po di fantasia, e con l’oggetto XMLDOM, possiamo creare una serie di interessanti applicazioni basate su XML, utilizzando ASP come linguaggio di interfaccia. L’oggetto di questo articolo è un sistema di autenticazione, o che dir si voglia di login, basato su un file XML di cui presento la struttura, contenuta all’interno del file login.xml:
<?xml version="1.0"?>
<database>
<utente>
<id>1</id>
<password>pippo</password>
</utente>
<utente>
<id>2</id>
<password>pluto</password>
</utente>
<utente>
<id>3</id>
<password>paperino</password>
</utente>
</database>
La struttura esplica chiaramente che ad ogni utente è assegnata una coppia di valori UserID e Password, ovvero le credenziali di accesso. Di seguito il codice HTML del modulo in cui inserire le proprie credenziali per l’autenticazione, contenuto nel file login.html
<form method="POST" action="login.asp"> User ID:<br> <input type="text" name="u_id"><br> Password:<br> <input type="password" name="pass"><br> <input type="submit" value="Login"> </form>
Di seguito il codice commentato del file login.asp
<%@LANGUAGE = VBScript%>
<%
' Recupero i dati dal modulo HTML
Dim u_id, pass
u_id = Request.Form("u_id")
pass = Request.Form("pass")
' Imposto un'espressione regolare per verificare che
' i caratteri inseriti nei campi UserID e Password
' siano alfanumerici, in modo da non dar fastidio all'XML
Dim re
Set re = New RegExp
re.Pattern = "^[a-zA-Z0-9]+$"
' Verifico che i campi siano valorizzati (correttamente)
If re.Test(u_id) = False OR re.Test(pass) = False Then
Response.Write "Inserire le credenziali di accesso!"
Else
' Una volta soddisfatte le condizioni...
' Apro un oggetto XMLDOM
Dim login
Set login = Server.CreateObject("Microsoft.XMLDOM")
' Carico il file XML
login.Async = False
login.Load Server.MapPath("login.xml")
' Recupero i nodi dal file XML
Dim id, password
Set id = login.getElementsByTagName("utente/id")
Set password = login.getElementsByTagName("utente/password")
' Creo un indice per individuare il nodo relativo
' all'utente che sta effettuando il login
Dim indice
indice = u_id - 1
' Verifico che l'utente esista e gli concedo o meno l'accesso
If id(indice).text = u_id AND password(indice).text = pass Then
Session("id") = u_id
Response.Write "Benvenuto!"
Else
Response.Write "Accesso negato!"
End If
' Pulisco l'oggetto login che crea l'istanza dell'XMLDOM
Set login = Nothing
End If
' Pulisco l'oggetto re contenente l'espressione regolare
Set re = Nothing
%>
Le pagine protette dovranno essere file ASP e contenere questo codice come prima riga
<%@LANGUAGE = VBScript%>
<%
If Session("id") = "" Then
Response.Write "Accesso negato!"
Response.End
End If
%>
<html>
<body>
Qui il codice della pagina privata!
</body>
</html>
Non è tutto oro quel che luccica, infatti c’è una grossa controindicazione: utilizzare un file XML che contenga dati sensibili come delle credenziali di accesso non è una scelta sicura perchè ci si potrebbe arrivare via HTTP, conoscendo o immaginando come potrebbe chiamarsi il file XML. Con questa considerazione non sto smontando i lettori in merito all’utilizzo di questo sistema, anche perchè altrimenti non ci avrei scritto un articolo!
Consideratelo dunque come risorsa puramente didattica.
