Creazione di un'area di accesso riservato

Introduzione

Sulla scorta del Tip Una semplice area di accesso riservato senza DB vediamo in questo più completo Articolo come implementare un reale servizio di protezione di un'area del nostro Sito. In questo caso utilizzeremo un database, per consentire non più ad un solo utente statico, ma ad una serie di utenti registrati, di usufruire di un servizio.


La pagina di Login: login.asp

La logica dell'Applicazione è praticamente identica a quella seguita nel Tip citato in precedenza, solo che si fa riferimento al database database.mdb ed in particolare alla tabella che chiameremo utenti, la quale avrà una serie di campi a scelta e secondo le esigenze dello sviluppatore, tra cui username e password.

Si crei la pagina login.asp, la quale conterrà sia il modulo che il codice Asp per effettuare la connessione alla propria area privata con proprio account-utente; di seguito il codice:

<%@LANGUAGE = JScript%>
<%
    var azione = new String(Request.QueryString("azione"));
%>
<html>
 <head>
  <title>Login</title>
 </head>
<body>

<%
    if (azione == "OK")
    {
        var username = new String(Request.Form("username"));
        var password = new String(Request.Form("password"));
        var username2 = username.replace(/'/g,"''");
        var password2 = password.replace(/'/g,"''");
        var Cn = new ActiveXObject("ADODB.Connection");
        Cn.Open("driver={Microsoft Access Driver (*.mdb)};
		dbq=" + Server.MapPath("database.mdb"));
        var Sql = "SELECT * FROM utenti WHERE username = 
'" + username2 + "' AND password = '" + password2 + "'";
        var EseguiLogin = Cn.Execute(Sql);
            if (EseguiLogin.EOF)
            {
                Cn.Close();
                Response.Write("ACCESSO NEGATO");
                Response.End;
            }
            else
            {
             Cn.Close();
             Session("username") = username;
             with (Response)
             {
             Write("<p align='center'>");
             Write("Benvenuto " + username + "!<br><br>");
             Write("Clicca 
             <a href='areaprivata.asp'>qui</a> per entrare!");
             Write("</p>");
             }

            }
    }
    else
    {
%>
<p align="center">
    <form method="post" action="login.asp?azione=OK">
        Username
        <input type="text" name="username">
        Password
        <input type="password" name="password">
        <input type="submit" value="Login">
    </form>
</p>
<%        
    }
%>

</body>
</html>

La logica seguita è molto semplice: implementiamo la variabile di tipo QueryString azione per controllare lo stato dell'Applicazione, ovvero se l'utente ha eseguito la procedura di login o meno, nel cui caso visualizzerà il modulo. In seguito recuperiamo Username e Password dal modulo e le confrontiamo nel database grazie alla Query

SELECT * FROM utenti WHERE 
username = '" + username2 + "' AND password = '" + password2 + "'

cercando l'uguaglianza dei capi username e password all'interno dello stesso record. Se l'operazione è andata a buon fine creiamo una sessione a suo nome

Session("username") = username;

altrimenti neghiamo l'accesso.


Le pagine private

Tenendo sempre come riferimento il Tip citato all'inizio dell'Articolo, vediamo come dovranno apparire le pagine private:

<%@LANGUAGE = JScript%>
<%
    if (Session("username") == null)
    {
        Response.Write("ACCESSO NEGATO");
        Response.End;
    }
    else
    {
/*
Ci connettiamo al database e, a seconda dell'Applicazione per cui ci serviamo 
di un'area di accesso riservato, recuperiamo i dati dell'utente loggato basandoci
sulla sessione che ha generato, ad esempio:

var Sql = "SELECT * FROM una_tabella WHERE 
username = '" + Session("username") + "'";
*/
%>
<html>
 <head>
  <title>Login</title>
 </head>
<body>

<p align="center">AREA PRIVATA</p>

</body>
</html>
<%
    }
%>

La pagina di Logout: logout.asp

Per effettuare il Logout sarà sufficiente creare un link verso il file logout.asp che conterrà il seguente codice:

<%@LANGUAGE = JScript%>
<%
    Session.Abandon();
    Response.Write("<p align="center">ARRIVEDERCI</p>");
%>

Autore: Luca Ruggiero