| Consigli PC  |

 

 

 ITALIA UMTS

Flying in the net!

black.gif (50 bytes)
 

www.calshop.biz

 
 

Italia UMTS nasce da una idea del team di calshop.biz e vuole essere nella rete un punto di riferimento nel settore dell'informazione e.
© 2002 - 2004 ItaliaUMTS Powered by calshop  -  All Rights Reserved.

 
black.gif (50 bytes)
 

Google
 
Web www.calshop.biz
 


Asp: la guida introduttiva

1 | 2 | 3 | 4 

ASP: la guida introduttiva

Capitolo 14 - Costruire un'area ad accesso riservato

   14.0   Presentazione del tutorial
   
14.1   Creazione del database
   
14.2   La pagina di iscrizione
   
14.3   La pagina di "login"
   14.4   I documenti riservati
   14.5   La pagina di "logout"
   14.6   Conclusioni
 

14.0 - Presentazione del tutorial

Le conoscenze acquisite in materia di ActiveX, accesso ai database e oggetti built-in verranno ora messe a frutto realizzando una semplice, quanto funzionale, area ad accesso riservato. Con questo termine si è soliti indicare una sezione di un sito Web la cui visualizzazione, per diversi motivi, non è pubblica, ma riservata ad un'utenza più ristretta. Ogni utente che vanti il permesso di poter accedere a sezioni di questo tipo dispone solitamente di una coppia di valori username-password, che può utilizzare per farsi riconoscere dal sistema e per farsi garantire l'accesso alla porzione protetta del Web. I motivi che possono spingere alla realizzazione di un servizio del genere sono molteplici, distinti da situazione in situazione. Almeno due sono comunque i casi più tipici. Il primo di questi è rappresentato da alcune aziende che necessitino di mettere a disposizione dei propri dipendenti delle informazioni riservate, comodamente accessibili via Web, anche quando si è a diversi chilometri di distanza dalla sede. Il secondo caso, invece, riguarda quei siti che richiedono una certa garanzia dalla propria utenza per rendere loro un servizio migliore, o comunque per fornire un'applicazione la cui funzionalità sia basata proprio sul fatto di saper distinguere un utente da un altro. La guida farà riferimento a questo secondo caso, realizzando una pagina di iscrizione pubblica, grazie alla quale chiunque potrà ottenere la propria coppia di valori username-password per accedere all'area protetta. Nulla toglie, comunque, che l'esempio resti valido anche nel primo caso. Basterebbe infatti eliminare la pagina di iscrizione pubblica e affidare la gestione e lo smistamento dell'utenza ad un amministratore appositamente designato. In ogni caso il tutorial, come al solito, non vuole rendere al lettore un servizio bello e pronto, quanto piuttosto guidarlo alla scoperta dei meccanismi che devono essere appresi per affrontare un problema del genere, in maniera tale che ognuno, in base alle differenti esigenze, possa poi essere in grado di realizzare un'applicazione analoga, pensata però in maniera specifica per un particolare caso.

14.1 - Creazione del database

Dovendo fornire a numerosi utenti delle distinte coppie username-password, è facile comprendere come sussista l'esigenza di memorizzare ciascuna di queste coppie all'interno del Web server, in maniera riservata, affinché il programma di validazione dati sia in grado di analizzare i dati immessi dall'utente e determinare in base ad essi se dover concedere o meno l'accesso all'area protetta. La prima mossa necessaria consiste quindi nello stabilire in quale maniera tali valori debbano essere memorizzati. Per l'esempio qui presentato si adotterà un database di Access, protetto tramite password. Creare il database necessario per l'esercitazione risulta abbasta semplice:

1. Si apra la propria copia di Access.
2. Si selezioni dal menù iniziale la voce "Database di Access vuoto".
3. Si nomini il nuovo database come utenza.mdb e lo si vada a posizionare all'interno della cartella che si intende utilizzare per l'esperimento.
4. Dalla finestra di gestione del database si selezioni la voce "Crea una tabella in visualizzazione Struttura".
5. Si definiscano ora i 3 seguenti campi: id, di tipo "Contatore"; username, di tipo "Testo", password, di tipo "Testo" (opzionalmente nella maschera di input è possibile specificare la dicitura "Password", per ottenere una visualizzazione in asterischi del campo quando il database viene aperto in Access).
6. Si selezioni la riga corrispondende al campo id e si utilizzi il bottone raffigurante una chiave per definire questo campo come chiave primaria.
7. Si salvi la tabella nominandola utenti.

Il database risulta già in questa forma adatto per l'utilizzo all'interno dell'esempio. Tuttavia è bene proteggere con una password ciascun database che possa contenere informazioni riservate, come nel caso in analisi. Tenendo aperto il database all'interno di Access, è possibile compiere tale operazione alla seguente maniera:

1. Dal menù si selezioni la voce "Strumenti > Protezione > Imposta password database...".
2. Si digiti la password desiderata, ad esempio "prova".
3. Si digiti la stessa password nel campo "Verifica".
4. Si confermi con il tasto "Ok" l'intera operazione.

Da questo momento in poi il database utenza.mdb risulterà protetto da password. Chiudendo Access e tentando di riaprire il file, infatti, se tutto è andato a buon fine, si dovrebbe ricevere la richiesta di inserimento della password.

14.2 - La pagina di iscrizione

A questo punto è necessario realizzare anzitutto uno script in grado di consentire agli utenti di registrarsi, ottenendo una coppia di valori username-password utilizzabili per accedere successivamente all'area protetta. Servirà anzitutto una comune pagina HTML (iscrizione.htm) contenente il modulo da compilare per richiedere l'adesione al servizio:

<html>
<head>
<title>Iscrizione al servizio</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">ISCRIZIONE AL SERVIZIO</font></b></p>
  <form method="post" action="iscrivimi.asp">
    <p>
      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">USERNAME:</font><br>
      <input type="text" name="username" maxlength="20" size="25">
    </p>
    <p>
      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">PASSWORD:</font><br>
      <input type="password" name="password1" size="25" maxlength="20">
    </p>
    <p>
      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">CONFERMA PASSWORD:</font><br>
      <input type="password" name="password2" size="25" maxlength="20">
    </p>
    <p><input type="submit" value="ISCRIVIMI"></p>
  </form>
</div>
</body>
</html>

A ricevere e processare i dati ci penserà quindi iscrivimi.asp, come mostrato di seguito:

<%@ LANGUAGE = JScript %>
<%
function visualizzaErrore(messaggioDiErrore) {
  // Mostra il messaggio di errore e interrompe il programma
  Response.Write('<html>\n');
  Response.Write('<head>\n');
  Response.Write('<title>Iscrizione al servizio</title>\n');
  Response.Write('<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">\n');
  Response.Write('</head>\n');
  Response.Write('<body bgcolor="#FFFFFF" text="#000000">\n');
  Response.Write('<div align="center">\n');
  Response.Write('<p> </p>\n');
  Response.Write('<p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#660000">');
  Response.Write('ERRORE: ' + messaggioDiErrore);
  Response.Write('</font></b></p>\n');
  Response.Write('<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">[<a href="#" onClick="history.back()">TORNA INDIETRO</a>]</font></p>\n');
  Response.Write('</div>\n');
  Response.Write('</body>\n');
  Response.Write('</html>\n');
  Response.End;
}

// PASSO 1: si riceve e si valida il modulo
username = String(Request.Form("username"));
password1 = String(Request.Form("password1"));
password2 = String(Request.Form("password2"));
if (username=="" || username=="undefined") visualizzaErrore("SPECIFICARE LO USERNAME");
if (username.charAt(0)==" ") visualizzaErrore("HAI INSERITO UNO SPAZIO DI TROPPO PRIMA DELLO USERNAME");
if (username.charAt(username.length-1)==" ") visualizzaErrore("HAI INSERITO UNO SPAZIO DI TROPPO DOPO LO USERNAME");
if (username.length<3 || username.length>20) visualizzaErrore("LO USERNAME DEVE ESSERE COMPRESO TRA 3 E 20 CARATTERI");
if (password1=="" || password1=="undefined") visualizzaErrore("SPECIFICARE LA PASSWORD");
if (password1!=password2) visualizzaErrore("LE DUE PASSWORD NON COINCIDONO");
if (password1.length<3 || password1.length>20) visualizzaErrore("LA PASSWORD DEVE ESSERE COMPRESA TRA 3 E 20 CARATTERI");

// PASSO 2: viene aperta la connessione verso la fonte di dati
ADOConn = new ActiveXObject("ADODB.Connection");
strConn = "";
strConn += "driver={Microsoft Access Driver (*.mdb)};";
strConn += "dbq=" + Server.MapPath("utenza.mdb") + ";";
strConn += "pwd=prova"; // SELEZIONARE QUI LA PASSWORD DI ACCESSO AL DATABASE SCELTA!
ADOConn.Open(strConn);

// PASSO 3: VIENE VERIFICATO CHE LO USERNAME NON SIA GIA' IN USO
tempUsername = username.replace(/'/g,"''");
sql = "SELECT * FROM utenti WHERE username LIKE '" + tempUsername + "'";
ris = ADOConn.Execute(sql);
if (!ris.EOF) {
  ris.Close();
  ADOConn.Close();
  visualizzaErrore("LO USERNAME SPECIFICATO GIA' RISULTA IN USO. MODIFICARE LA PROPRIA SCELTA.");
}
ris.Close();

// PASSO 4: IL NUOVO UTENTE VIENE REGISTRATO
RecSet = new ActiveXObject("ADODB.Recordset");
RecSet.Open("utenti",ADOConn,3,3);
RecSet.AddNew();
RecSet("username") = username;
RecSet("password") = password1;
RecSet.Update();
RecSet.Close();

ADOConn.Close();
%>
<html>
<head>
<title>Iscrizione al servizio riuscita!</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">COMPLIMENTI, ORA SEI ISCRITTO!</font></b></p>
</div>
</body>
</html>

I passaggi utilizzati dal codice non sono di difficile comprensione. E' stata realizzata la funzione visualizzaErrore, utile per mandare in output ogni eventuale messaggio di errore e per interrompere l'esecuzione dello script. Il modulo viene ricevuto e validato in base a dei criteri piuttosto generici, quindi la connessione al database viene stabilita. Per prima cosa si verifica che lo username specificato non sia già stato registrato da un altro utente, mediante una ricerca case-insensitive (operatore LIKE). Una volta superato tale controllo un nuovo record, costituito dai dati appena ricevuti, viene inserito nella tabella utilizzata. Se tali operazioni non dovessero risultare di immediata comprensione si torni allora a rivedere i Capitoli dal 9 al 12, interamente dedicati all'utilizzo dei database all'interno delle pagine ASP.

14.3 - La pagina di "login"

Per accedere all'area riservata è ora necessario realizzare una pagina che consenta all'utente di farsi riconoscere. Ancora una volta il processo non risulta complicato. Viene qui presentato il codice di login.asp:

<%@ LANGUAGE = JScript %>
<%
errore = false;

username = String(Request.Form("username"));
password = String(Request.Form("password"));

from = String(Request.QueryString("from"));

if (username!="undefined" && username!="") {
  from = Request.Form("from");
  ADOConn = new ActiveXObject("ADODB.Connection");
  strConn = "";
  strConn += "driver={Microsoft Access Driver (*.mdb)};";
  strConn += "dbq=" + Server.MapPath("utenza.mdb") + ";";
  strConn += "pwd=prova"; // SELEZIONARE QUI LA PASSWORD DI ACCESSO AL DATABASE SCELTA!
  ADOConn.Open(strConn);
  tempUsername = username.replace(/'/g,"''");
  tempPassword = password.replace(/'/g,"''");
  sql = "SELECT * FROM utenti WHERE username LIKE '" + tempUsername + "' AND password = '" + tempPassword + "'";
  ris = ADOConn.Execute(sql);
  if (ris.EOF) errore = true;
  else {
    Session.Timeout = 15;
    Session("username") = String(ris("username"));
    ris.Close();
    ADOConn.Close();
    if (from!="undefined") Response.Redirect(from);
    else Response.Redirect("main.asp");
  }
  ris.Close();
  ADOConn.Close();
}
%>
<html>
<head>
<title>Accesso all'area riservata</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">ATTENZIONE! STAI PER ACCEDERE AD UN'AREA RISERVATA. DEVI AUTENTIFICARTI.</font></b></p>
  <% if (errore) { %>
  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000">DATI NON TROVATI, ACCESSO NEGATO</font></b></p>
  <% } %>
  <form method="post" action="login.asp">
    <input type="hidden" name="from" value="<%=from%>">
    <p>
      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">USERNAME:</font><br>
      <input type="text" name="username" maxlength="20" size="25">
    </p>
    <p>
      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">PASSWORD:</font><br>
      <input type="password" name="password" size="25" maxlength="20">
    </p>
    <p><input type="submit" value="ACCEDI"></p>
  </form>
</div>
</body>
</html>

Si osservi il meccanismo utilizzato. Qualora il processo di autentificazione dovesse andare a buon fine, lo script si curerebbe allora di creare la variabile Session("username"), inserendo al suo interno lo username utilizzato dall'utente. Il perché dell'utilizzo dell'oggetto built-in Session verrà illustrato nel corso del paragrafo successivo.
Ci si soffermi ora ad osservare invece l'utilizzo della particolare variabile from e del meccanismo di reindirizzamento ad essa collegato. In buona sostanza l'utente può finire su login.asp in due distinti casi: quando vi accede direttamente con il proprio browser e quando tenta di accedere ad un documento riservato senza essersi prima autentificato. Il primo caso è il più semplice. Nessuna querystring viene appesa all'URL della pagina, pertanto la variabile from perde il suo significato. Una volta effettuato il login l'utente verrà reindirizzato alla pagina main.asp, qui non trattata, che dovrebbe ipoteticamente rappresentare l'home page dell'intera area ad accesso limitato. Quando l'utente tenterà invece di accedere direttamente ad uno dei documenti protetti dal metodo che tra poco sarà descritto, senza essersi però autentificato in precedenza, allora verrà rimandato a login.asp, con l'aggiunta dell'indirizzo della pagina di provenienza appeso in querystring. In questa maniera, una volta autentificato, l'utente verrà rispedito direttamente alla pagina alla quale aveva tentato originariamente di accedere. Ovviamente essendosi autentificato potrà in questo caso visualizzarne il contenuto senza problemi. Si tratta di un'ottima funzionalità aggiuntiva!

14.4 - I documenti riservati

Far appartenere un particolare documento all'area riservata significa, di fatto, configurarlo in maniera adeguata secondo le seguenti indicazioni.

1. Il documento dovrà avere sempre e comunque estensione .asp, in quanto includerà il controllo necessario sotto forma di script.
2. Le prime righe del documento dovranno necessariamente essere:

<%@ LANGUAGE = JScript %>
<%
if (Session("username")==null) {
  from = escape(String(Request.ServerVariables("SCRIPT_NAME")));
  Response.Redirect("login.asp?from=" + from);
}
%>

L'oggetto built-in Session è stato descritto nel Capitolo 13.
Nel caso le pagine dell'area non fossero tutte contenute nella stessa cartella di login.asp, allora sarà necessario adattare di volta in volta l'istruzione Response.Redirect, in modo da puntare sempre alla giusta locazione della pagina utile per il proprio riconoscimento.
Per testare la funzionalità dello script si realizzi la pagina prova.asp:

<%@ LANGUAGE = JScript %>
<%
if (Session("username")==null) {
  from = escape(String(Request.ServerVariables("SCRIPT_NAME")));
  Response.Redirect("login.asp?from=" + from);
}
%>
<html>
<head>
<title>Pagina interna all'area riservata</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">BENVENUTO <%=Session("username")%>!</font></b></p>
</div>
</body>
</html>

Si registri quindi uno username passando per iscrizione.htm, quindi si inserisca l'URL di prova.asp senza prima essersi autentificati.

14.5 - La pagina di "logout"

Una volta che l'utente si è autentificato gli sono concessi, secondo l'esempio utilizzato, 15 minuti di inattività prima che la sua sessione scada. Tuttavia in diversi casi è necessario che la sessione, su comando dell'utente stesso, possa concludersi senza dover attendere lo scorrere dei 15 minuti dall'ultima operazione eseguita. Pertanto è oppurtuno inserire all'interno di ognuno dei documenti protetti un collegamento verso logout.asp:

<%@ LANGUAGE = JScript %>
<%
Session.Abandon();
%>
<html>
<head>
<title>Uscita dall'area riservata</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">ARRIVEDERCI!</font></b></p>
</div>
</body>
</html>

14.6 - Conclusioni

Si conclude qui questo tutorial dedicato ai metodi di realizzazione, tramite ASP, di un'area ad accesso riservato. Si lascia ora alla fantasia e alle esigenze del lettore il compito di adattare quanto appreso ai più disparati casi pratici.

Home Page

1 | 2 | 3 | 4 

 
Trucchi PC e Guide
Tips su sistemi operativi, registro di configurazione, sicurezza, internet, navigazione, word ed excel. ................ ....
 

Guide e sulla configurazione, installazione ed utilizzo di, periferiche, sistemi operativi ecc... .............................................................


 

 
 
Halloween  
Halloween Online

Utenti on line

Ultimo aggiornamento giugno 2005