Le variabili di Sessione risiedono nella memoria del server. Esse hanno una vita breve, poiché "scadono" quando l'utente chiude la finestra del browser e accede nuovamente al sito, creando così una nuova sessione ColdFusion.
Una buona idea può essere quella di memorizzare lo username e la password in un cookie così che l'utente abbia il form di autenticazione già compilato e non debba ogni volta digitare login e password.
1. inserisci alla fine del file index.cfm il tag per includere il form di autenticazione:
<hr>
<cfinclude template="autenticazione.cfm">
Ora sarà possibile eseguire il login anche dalla home page. Ogni volta che l'utente esegue il login, salviamo in due cookie lo username e la password.
2. Modifica il file autenticazione.cfm là dove viene verificato l'invio del form di login:
<!--- Esegue il logout dell'utente --->.
<cfif isDefined('form.faiLogout')>
<cflogout>
</cfif><!--- Il codice all'interno di <cflogin> viene eseguito solo se l'utente non è già autenticato --->.
<cflogin> <cfif isDefined('form.username') AND isDefined('form.password')>
<!--- Memorizza username e password nei cookie --->.
<cfcookie name="username" value="#form.username#" expires="NEVER">
<cfcookie name="password" value="#form.password#" expires="NEVER">
.......
Il tag <cfcookie> crea una variabile con scope "cookie" che viene salvata nel computer dell'utente. L'attributo "name" dà il nome alla variabile, l'attributo "value" ne definisce il valore e l'attributo "expires" la scadenza.
Se si passa all'attributo "expires" la parola chiave "NEVER" significa che il cookie rimarrà memorizzato sul client del visitatore 1) finché egli non lo rimuove e 2) finché noi non lo facciamo scadere. Alternativamente, avremmo potuto specificare una data (nel formato mm/gg/anno) o il numero di giorni terminati i quali il cookie deve scadere.
3. Modifichiamo il file modulo_login.cfm affinché visualizzi il contenuto del cookie:
<!--- modulo_login.cfm: mostra un modulo per eseguire il login --->.
<p class="titolo">
Esegui l'autenticazione
</p>
<p>
<cfform>
<table border="0" cellspacing="1" cellpadding="3">
<tr>
<td><p>Username:</p></td>
<td><cfinput name="username" type="text" required="yes" message="Inserisci il tuo username." value="#cookie.username#"></td>
</tr>
<tr>
<td><p>Password:</p></td>
<td><cfinput name="password" type="password" value="#cookie.password#"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Login"></td>
</tr>
</table>
</cfform>
</p>
Nota che all'interno di un <cfform> non è necessario utilizzare <cfoutput> per visualizzare il contenuto delle variabili.
4. Poiché non è detto che i cookie siano esistenti, utilizziamo il tag <cfparam> per attribuire alle due variabili "cookie.username" e "cookie.password" una stringa vuota come valore di default:
<!--- modulo_login.cfm: mostra un modulo per eseguire il login --->.
<cfparam name="cookie.username" default="" type="string">
<cfparam name="cookie.password" default="" type="string">
<p class="titolo">
Esegui l'autenticazione
</p>
<p>
<cfform>
<table border="0" cellspacing="1" cellpadding="3">
<tr>
<td><p>Username:</p></td>
<td><cfinput name="username" type="text" required="yes" message="Inserisci il tuo username." value="#cookie.username#"></td>
</tr>
<tr>
<td><p>Password:</p></td>
<td><cfinput name="password" type="password" value="#cookie.password#"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Login"></td>
</tr>
</table>
</cfform>
</p>
5. Quando l'utente esegue il logout i cookie possono venire eliminati: aggiungi il seguente codice al file autenticazione.cfm, là dove ColdFusion esegue il <cflogout>:
<!--- Esegue il logout dell'utente --->.
<cfif isDefined('form.faiLogout')>
<cfcookie name="username" expires="NOW">
<cfcookie name="password" expires="NOW">
<cflogout>
</cfif><!--- Il codice all'interno di <cflogin> viene eseguito solo se l'utente non è già autenticato --->.
<cflogin>
.....
L'attributo expires="NOW" indica a <cfcookie> di eliminare i cookie con il nome specificato nell'attributo "name".
Fai delle prove per verificare il funzionamento: vedrai che se chiudi il browser quando un utente è autenticato, ColdFusion dimentica la sessione autenticata. Riaprendo la pagina, però, il modulo di login conterrà i campi già compilati con i valori provenienti dal cookie. Cliccando, invece, sul pulsante di logout i campi saranno vuoti poiché i cookie sono stati eliminati.
Non è una cattiva idea aggiungere, al messaggio di benvenuto, i link alle pagine inserimento.cfm o elimina.cfm, qualora l'utente autenticato possa accedervi.
6. Modifica ad esempio il messaggio di benvenuto, nel file autenticazione.cfm, in questo modo:
.......
</cflogin>
<cfoutput>
<p><form method="post">Bentornato <b>#GetAuthUser()#</b>!
<input type="submit" value="Logout" name="faiLogout"></form></p>
<p>
<cfif isUserInRole('inserimento')>
Puoi <a href="inserimento.cfm">inserire</a> nuovi album.<br>
<cfelse>
Non puoi inserire nuovi album.<br>
</cfif>
<cfif isUserInRole('eliminazione')>
Puoi <a href="elimina.cfm">cancellare</a> gli album esistenti.<br>
<cfelse>
Non puoi cancellare gli album esistenti.<br>
</cfif>
<cfif isUserInRole('modifica')>
Puoi modificare gli album esistenti.
<cfelse>
Non puoi modificare gli album esistenti.
</cfif>
</p>
</cfoutput>
Fai ora dei test sul funzionamento del sistema di autenticazione. Se vuoi confrontare i file che hai scritto fino a qui con quelli che ho fatto io puoi scaricarli da qui.