Per diversi motivi può essere necessario proteggere determinate pagine con nome utente e password e consentirne la visualizzazione solo agli utenti registrati: in questo caso lo username e la password non sono definiti una volta per tutte ma vengono di volta in volta scelti dall’utente nella fase di registrazione.
Lo scopo della registrazione gratuita è duplice: ottenere nome, cognome, età, email, settore di interesse o altre informazioni che possono interessare il gestore del sito.
In secondo luogo non viene definito un nome utente e una password validi per tutti ma si lascia tale scelta all’utente: in questo modo può scegliere parole che riesce a ricordare con maggiore facilità.
Vediamo come strutturare tale sistema di ‘registrazione’ degli utenti.
Innanzitutto occorre predisporre un modulo di registrazione in cui inserire i propri dati e il nome utente e la password che si desidera usare.
Tali dati verranno memorizzati in un database (che noi chiamiamo ‘pass.mdb’ e che memorizziamo nella solita cartella ‘database’).
Quando si cerca di accedere ad una sezione ‘riservata’, si viene reindirizzati verso una pagina che ha il compito di richiedere il nome utente e la password del visitatore.
Vediamo che cosa ci serve.
PASS.MDB
Il database dovrà contenere un’unica tabella di nome ‘pass’ composta da campi di testo (per sicurezza portiamo a 255 il numero massimo dei caratteri utilizzabili): nome, user, pwd
RICREG.HTM
Innanzitutto creiamo il modulo in cui l’utente dovrà inserire i propri dati. Per semplicità noi chiediamo solo ‘nome’, ‘username’ e ‘password’, ma, se volete, potete aggiungere ulteriori voci.
Pertanto creiamo una normale pagina html e inseriamo un modulo con tre campi di testo a riga singola: ‘form_nome‘, ‘form_username‘ (in cui l’utente inserirà il nome utente scelto) e ‘form_password‘. Tale modulo dovrà caricare la pagina ‘registrami.asp’
Il codice potrà essere qualcosa del tipo
<form method=”POST” action=”registrami.asp”>
<p align=”center”>Nome<br> <input type=”text” name=”form_nome” size=”20″></p> <p align=”center”>Username<br> <input type=”text” name=”form_user” size=”20″></p> <p align=”center”>Password<br> <input type=”password” name=”form_password” size=”20″></p> <p align=”center”><input type=”submit” value=”Invia” name=”B1″><input type=”reset” value=”Reimposta” name=”B2″></p> </form> |
REG_OK.HTM
Visualizziamo una semplice pagina html che conferma l’avvenuta registrazione (per esempio ‘registrazione effettuata con successo’)
REGISTRAMI.ASP
Come abbiamo accennato il modulo viene ‘processato’ dalla pagina ‘registrami.asp’.
Scopo di questa pagina è quello di aggiungere i dati prelevati dal modulo al nostro database e inviarci un’email avvertendo che un nuovo utente si è registrato.
Per prima cosa, quindi, preleviamo i dati dal modulo precedentemente compilato: utilizziamo di nuovo la funzione ‘request.form(“nome_campo”)’ che abbiamo già avuto modo di spiegare.
<%
dim nome dim user dim pwd nome=request.form(“form_nome”) user=request.form(“form_user”) pwd=request.form(“form_password”) |
A questo punto apriamo la connessione con il database e, dopo averne selezionato i valori, creiamo un nuovo record mediante ‘rs.addnew’.
Dim conn
Set conn = Server.CreateObject(“ADODB.Connection”) conn.Open “DRIVER={Microsoft Access Driver (*.mdb)};DBQ=” & server.MapPath(“database/pass.mdb”) sql = “SELECT * FROM pass” Set rs = Server.CreateObject(“ADODB.Recordset”) rs.Open sql, conn, 3, 3 RS.AddNew |
A questo punto inseriamo i dati presi dal modulo e memorizzati nelle rispettive variabili
rs.Fields(“nome”)=nome
rs.Fields(“user”)=user rs.Fields(“pwd”)=pwd |
Fatto questo aggiorniamo il database e chiudiamo la connessione
rs.update
RS.Close Set RS=Nothing conn.Close Set conn=Nothing |
Come ultima cosa carichiamo la pagina di conferma ‘reg_ok.htm’
response.redirect(“reg_ok.htm”)
%> |
Così facendo l’utente ha inserito il nome utente e la password voluti all’interno del database.
Ora vediamo come dovrà usare questi dati.
PRIVATA_1.ASP
Creiamo innanzitutto una pagina asp che chiamiamo ‘privata_1.asp’: questa è appunto la prima pagina la cui visione è permessa solo agli utenti registrati che hanno inserito nome utente e password corretti.
La pagina è molto simile a ‘protetta.asp’.
La prima cosa da fare è controllare che l’oggetto session ‘registrato’ abbia ‘sicuro’ come valore. Questo significa che l’utente ha passato la verifica di username e password, in quanto tale session viene creata solo nel momento in cui l’utente ha inserito username e password corretti. Se invece l’utente cerca di accedere a tale pagina semplicemente digitandone l’indirizzo verrà spostato su una pagina che lo prega di inserire i propri dati (validate.asp, che vedremo in seguito)
Quindi la pagina ‘privata_1.asp’ sarà così strutturata
<%
if session(“registrato”) <> “sicuro” then response.redirect(“validate.asp?url=privata_1.asp”) else %> |
Qui inseriamo il codice normale della pagina
<font face=”verdana” size=”2″> <p align=”center”>Vedo con piacere che ti sei registrato <br>
e che hai inserito correttamente lo username e la password</p> <p><a href=”privata_2.asp”>Visualizza la seconda pagina</a></p></font> |
Chiudiamo poi la pagina con end if (if… then… else… end if )
<% end if %> |
PRIVATA_2.ASP
Questa è la seconda pagina ‘riservata’: anche qui controlliamo che l’oggetto session. Se non ha il valore corretto, reindirizziamo l’utente sulla pagina in cui inserire username e password
<%
if session(“registrato”) <> “sicuro” then response.redirect(“validate.asp?url=privata_2.asp”) else %> <font face=”verdana” size=”2″> <p align=”center”>Visto che funziona?</p> <p><a href=”privata_1.asp”>Torna alla prima pagina</a></p></font> <% end if %> |
VALIDATE.ASP
Come potete notare dal codice delle pagina ‘privata_1.asp’ e ‘privata_2.asp’, nel caso in cui l’utente non si sia ancora autenticato, viene caricata la pagina ‘validate.asp’, passandole il parametro ‘url’ avente, come valore, il nome della pagina ‘protetta’.
Così facendo la pagina validate.asp è in grado di autenticare l’utente e ri-caricare la pagina a cui aveva tentato di accedere: in pratica faremo un ‘response.redirect’ sul nome contenuto nella variabile ‘url’.
Il codice della pagina probabilmente risulta più chiaro delle mie spiegazioni.
Vediamo innanzitutto il modulo in cui inserire nome utente e password: tale modulo dovrà richiamare la pagina check.asp e dovrà contenere due campi di testo a riga singola (di cui il secondo è un campo ‘password’), che chiameremo ‘form_user‘ e ‘form_password‘. Inseriamo poi un campo di testo nascosto (che chiamiamo ‘form_url‘) cha avrà come valore iniziale il valore del parametro ‘url’: valore che otteniamo mediante la funzione ‘request.querystring’.
<%
dim url url=request.querystring(“url”) %> <form method=”POST” action=”check.asp”> <p align=”center”>Username<br> <input type=”text” name=”form_user” size=”20″></p> <p align=”center”>Password<br> <input type=”password” name=”form_password” size=”20″></p> <p align=”center”><input type=”submit” value=”Invia” name=”B1″><input type=”reset” value=”Reimposta” name=”B2″></p> <input type=”hidden” name=”form_url” value=”<% = url %>”> </form> |
CHECK.ASP
Per la realizzazione di questo file ho preso spunto dal materiale disponibile sul sito http://www.ligasoft.com
Questo file si occupa di controllare che lo username e la password inserite siano presenti nel database ‘pass.mdb’, in modo da verificare che l’utente si sia effettivamente registrato.
Nel caso in cui il nome utente o la password non corrispondessero, verrebbe caricata una pagina di errore (‘CHECK_OUT.HTM‘, che altro non è che una pagina html con un testo che invita l’utente a verificare l’esattezza dei dati inseriti o, nel caso, a registrarsi mediante la pagina ‘ric_reg.htm’ vista in precedenza).
Come prima cosa preleviamo i dati dal modulo mediante la solita funzione ‘request.form’
<%
dim user dim pwd dim url user=replace(request.form(“form_user”),”‘”,”””) pwd=replace(request.form(“form_password”),”‘”,”””) url=request.form(“form_url”) |
A questo punto creiamo la connessione al database ‘pass.mdb’
Dim Conn
Set Conn = Server.CreateObject(“ADODB.Connection”) conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & server.mappath(“database/pass.mdb”) Set rs = Server.CreateObject(“ADODB.Recordset”) |
Preparo poi la stringa di ricerca
qry = “Select * from pass Where ((user='”
qry = qry & user & “‘) AND (pwd='” qry = qry & pwd & “‘));” |
configuro il recordset e lo apro eseguendo poi la ricerca nel database
rs.ActiveConnection = conn
rs.CursorLocation = 2 rs.Open qry |
Controllo che non rimanga nulla nella cache dell’utente
Response.Expires=0 |
Nel caso in cui il nome utente o la password non compaiano nel database, reindirizziamo l’utente sulla pagina di errore citata prima (‘check_out.htm’)
if rs.EOF then
response.redirect(“check_out.htm”) |
Se invece tutto ha funzionato correttamente creiamo l’oggetto session ‘registrato’ e gli assegniamo, come valore, la parola ‘sicuro’.
else
session(“registrato”)=”sicuro” |
A questo punto chiudiamo la connessione e carichiamo la pagina che l’utente aveva cercato di visualizzare senza essersi autenticato. Il nome di tale pagina è memorizzato nella variabile ‘url’. Quindi avremo
rs.close
set rs = nothing conn.close set conn = nothing response.redirect(url) end if %> |