Architettura – Server Web
Transcript
Architettura – Server Web
Database e Web - Tutorial ASP - Andrea Proli [email protected] Laboratorio di Basi di Dati – A.A. 2006/2007 Architettura – Server Web n Si dispone di: Diverse macchine client (sulle quali siete loggati) Un server web (si-wwwdida.csr.unibo.it) Un server di dati ORACLE (srvoracle.csr.unibo.it) CLIENT WEB SERVER (si-wwwdida.csr.unibo.it, 137.204.74.85) FrontFront-end (Web Browser) Application Logic (ASP Files) DATA SERVER (srvoracle.csr.unibo.it, 137.204.74.173) BackBack-end (Databases) 2 Flashback 1: Applicazione ASP n Una applicazione ASP è un insieme di documenti (“pagine ASP”) collocati nella stessa directory virtuale Si può pensare ad un’applicazione ASP come ad un “sito” Web strutturato su più pagine Lo stesso server Web può ospitare diverse applicazioni ASP Per ogni applicazione ASP possono risultare attive contemporaneamente diverse sessioni, associate a utenti diversi 3 Flashback 1: Applicazione ASP n La “mappa” di un server Web sul quale girano due applicazioni ASP: Web server Application 1 Page Y Page X Page Z Application 2 Page A Page B Session 1 Session 2 Session 3 Session 4 Variables Variables Variables Variables Variables Variables 4 Creare un’applicazione ASP n Per creare un’applicazione ASP occorre configurare il server Web (SI-WWWDIDA): Creare una nuova cartella sul file system del computer che ospita il server Web, ad esempio C:\Inetpub\wwwroot\TutorialASP Impartire al server Web (il programma, non il PC!) un comando per creare una nuova virtual directory, directory il cui percorso fisico sia quello della cartella appena creata Impostare i permessi da concedere su quella virtual directory (si possono scrivere, creare, leggere, cancellare file? Eseguire script, pagine ASP o programmi? ...) 5 Configurare Microsoft IIS 6.0 n Internet Information Services (IIS), il server Web di Microsoft, dispone di un’interfaccia grafica per la gestione delle virtual directory Elenco delle applicazioni Web attive (in questo caso 2). Ciascuna voce corrisponde ad una differente applicazione, dotata di una propria virtual directory che mappa su una cartella del file system 6 Creare una nuova Web App n Supponiamo di aver già creato sul file system della macchina che ospita il server Web la cartella C:\Inetpub\wwwroot\TutorialASP, e di associarle sul server Web una nuova virtual directory (MyWebApp) 2 1 7 Creare una nuova Web App n Dopo aver fornito l’alias (il nome) della nuova virtual directory, la mappiamo sulla cartella fisica creata e impostiamo i permessi sufficienti all’inserimento e all’esecuzione di pagine ASP 3 4 8 Creare una nuova Web App n Dopo aver mappato la virtual directory è possibile impostare una serie di opzioni 6 5 9 Creare una nuova Web App n E’ possibile ad esempio impostare la pagina di default da restituire quando la richiesta fa riferimento all’URL dell’applicazione Web, ma senza specificare una pagina in particolare 7 In questo caso il server Web, ricevendo una richiesta HTTP il cui URL è: http://<nome server>/mywebapp tenterà di restituire la pagina: http://<nome server>/mywebapp/Default.htm Se questa non esiste proverà a recuperare la pagina con indirizzo: http://<nome server>/mywebapp/Default.asp, http://<nome server>/mywebapp/index.htm e, infine, http://<nome server>/mywebapp/iisstart.asp. Se nessuna di queste risorse è presente, il contenuto della risposta HTTP dipende dai permessi… 10 Creare una nuova Web App n Un’altra impostazione di rilievo riguarda il caching. caching Per migliorare le prestazioni, il server Web mantiene in cache il risultato di una richiesta, per poi restituirlo direttamente quando riceve richieste identiche… Questo comportamento può aumentare i tempi di risposta, ma può sortire effetti non desiderati. desiderati 8 Ad esempio, il caching di una pagina ASP è dannoso quando il contenuto è dinamico, ossia quando alla stessa richiesta (in funzione di elaborazioni eseguite dal codice di script) si vuole poter rispondere in modi diversi… Esempio: Esempio (1) accedo alla pagina degli ordini; (2) elimino un ordine; (3) accedo di nuovo alla pagina degli ordini… 11 Caching e dinamicità n n n Il meccanismo del caching può essere dannoso perché di fatto inibisce la possibilità di instaurare un meccanismo di dinamicità lato server Le impostazioni di caching per la virtual directory sul server Web consentono di disabilitare il caching lato server Tuttavia, occorre anche disabilitare il caching lato client: client anche il browser infatti, per ridurre i tempi di risposta, può memorizzare in una propria cache una pagine HTML restituita in risposta ad una richiesta (relativa per esempio ad una pagina “.asp”) e riproporla direttamente per richieste analoghe senza interrogare di nuovo il server 12 Caching lato client n Disabilitare il caching lato client in Internet Explorer: Selezionare la voce “Opzioni Internet” dal menu “Strumenti” Selezionare la scheda “Generale” e premere “Impostazioni” Selezionare l’opzione “Automaticamente” oppure l’opzione “All’apertura della pagina” (più sicura) 13 Le virtual directory n n n Agli studenti non è concesso di accedere al server Web su SI-WWWDIDA e configurare direttamente le proprie virtual directory Pertanto, per ciascun gruppo è stata già predisposta una virtual directory da utilizzare nel corso di questo tutorial e durante le successive esercitazioni L’URL corrispondente per il gruppo *** è http://si-wwwdida(.csr.unibo.it):50001/LabDB_Gruppo**/ Server Web Virtual directory 14 Virtual directory per i gruppi n In ciascuna virtual directory è inclusa una pagina “start.html” che visualizza alcune informazioni di carattere generale, alla quale è possibile accedere attraverso l’URL: http://si-wwwdida:50001/LabDB_Gruppo**/start.html n Siccome per ogni virtual directory è stato concesso il permesso di esplorazione, è possibile esplorazione visualizzarne il contenuto digitando semplicemente l’URL: http://si-wwwdida:50001/LabDB_Gruppo**/ 15 Test della configurazione n Per verificare che la virtual directory sia stata configurata correttamente: Effettuare login su un computer che non sia il server Web Aprire il browser Internet e digitare l’URL dell’applicazione Web sulla barra degli indirizzi (facendo eventualmente riferimento ad una specifica risorsa) Se viene mostrata la pagina predefinita oppure il contenuto della directory virtuale (nel caso sia stato concesso il permesso di esplorazione), allora la configurazione è correttta 16 Popolare le virtual directory n n Se la virtual directory è stata configurata correttamente, risulta ora possibile – previa concessione dei diritti sul file system – inserire nuovi documenti all’interno della cartella sulla quale essa viene mappata Se si potesse effettuare login direttamente sul server Web sarebbe sufficiente inserire i file nella cartella fisica corrispondente, ad esempio: esempio D:\Utenti\LabDB\Gruppo**\WWW 17 Popolare le virtual directory n Se non è possibile effettuare login sul server Web, si può ricorrere a: FTP (occorre disporre di un client FTP, a patto che un server FTP sia attivo sulla macchina che ospita anche il server Web) TELNET (occorre disporre di un client TELNET, a patto che un server TELNET sia attivo sulla macchina che ospita anche il server Web) Utilizzare il meccanismo UNC di file sharing di Windows (a patto che si usi tecnologia Microsoft) per accedere al file system remoto … 18 Popolare le virtual directory n n Le cartelle su cui sono mappate le virtual directory di ciascun gruppo sono condivise in rete E’ possibile accedervi tramite Explorer di Windows: Selezionare Start -> Esegui Digitare \\si-wwwdida-vm(.csr.unibo.it)\LabDB_Gruppo*** E’ anche possibile digitare lo stesso percorso sulla barra degli indirizzi di una qualsiasi istanza di explorer.exe 19 Popolare le virtual directory n Si editi il seguente file HTML e lo si inserisca all’interno della propria virtual directory come test.htm: test.htm <HTML> <HEAD> <TITLE>Test</TITLE </HEAD> <BODY> <B>This is a test</B> </BODY> </HTML> n Si lanci il browser Internet e si richieda il documento di cui sopra, digitandone l’URL 20 Editing e caching: attenzione! n n n Modificare il file test.htm appena creato (ad esempio, cambiare il testo all’interno della coppia di tag <B> e </B>), lasciando invariato il nome Attivare le funzionalità di caching del browser. In Internet Explorer: selezionare Menu Strumenti -> Opzioni Internet (Scheda “Generale”) -> Impostazioni -> “Mai” o “All’avvio di IE” Ridigitare l’URL per visualizzare di nuovo il file modificato: notare gli effetti del caching 21 HTTP e Caching n n n Il protocollo HTTP (Hyper Text Transfer Protocol) consente ad un server Web di incapsulare, nella risposta HTTP con cui fornisce al client la risorsa richiesta, una serie di direttive - sempre sottoforma di coppie nome-valore Tre di queste direttive (“Pragma”, “Expires”, e “Cache-Control”) controllano il modo in cui il client gestisce il caching delle risposte HTML supporta i cosiddetti “meta-tag HTTP-EQUIV” per incapsulare queste direttive, anziché nella risposta HTTP, all’interno del documento HTML. 22 HTTP e Caching n Il seguente esempio mostra come sia possibile impostare le direttive di caching all’interno di un file HTML per far sì che il browser non utilizzi le impostazioni di default quando l’utente effettua un’ulteriore richiesta per quella stessa risorsa: risorsa <HTML> <HEAD> <TITLE>…</TITLE> <META HTTP-EQUIV=“Pragma” CONTENT=“no-cache”> <META HTTP-EQUIV=“Expires” CONTENT=“-1”> <META HTTP-EQUIV=“Cache-Control” CONTENT=“no-cache, must-revalidate”> </HEAD> <BODY> … </BODY> </HTML> 23 HTTP e Caching n n n n Modificare il file test.htm aggiungendo i tre meta-tag per il controllo del caching all’interno dell’header HTML Ricaricare la pagina test.htm all’interno del browser facendo click sul pulsante di refresh Modificare il titolo o il contenuto della pagina test.htm, quindi ridigitarne l’URL per test.htm visualizzarla di nuovo Notare come le impostazioni di caching del browser Web siano state sovrascritte… sovrascritte 24 Architettura – Server dei dati n Dopo aver configurato e testato le virtual directory sul server Web, analizziamo ora la configurazione del server dei dati. Si dispone di un server ORACLE 8.1 CLIENT WEB SERVER (si-wwwdida.csr.unibo.it, 137.204.74.85) FrontFront-end (Web Browser) Application Logic (ASP Files) DATA SERVER (srvoracle.csr.unibo.it, 137.204.74.173) BackBack-end (Databases) 25 Il server dei dati n n Il server dei dati (srvoracle.csr.unibo.it) gestisce il DB SISINF, SISINF che verrà utilizzato nella prima parte di questo tutorial SISINF memorizza informazioni su ipotetici clienti di un’azienda fittizia: CLIENTI(C_CF, C_Nome, C_Indirizzo, C_Provincia, C_Regione, C_Password) 26 Preparare l’applicazione test n L’applicazione Web consiste di un insieme di pagine ASP e HTML che illustrano come gestire 1. il passaggio di dati da una pagina HTML al server Web tramite i FORM 2. la connessione ad un DB e la successiva interrogazione dello stesso. 3. le procedure di autenticazione (login e logout) 4. l’utilizzo di variabili di sessione 27 Preparare l’applicazione test Scaricare il file ZIP contenente i sorgenti ASP e HTML dal seguente indirizzo: http://wwwdida.csr.unibo.it/golfare/sorgenti.zip n n Estrarre i file all’interno della cartella su cui è mappata la virtual directory assegnata al proprio gruppo 28 Preparare l’applicazione test n La cartella principale contiene i file “.asp” e “.htm” che costituiscono l’applicazione n La pagina “index.asp” n principale dell’applicazione è L’applicazione contiene il file “util.asp”, importato da tutti gli altri file “.asp”, che definisce la stringa per la connessione al DB, i meta-tag e altre funzioni di utilità generale 29 Architetttura – FORM e HTTP n E’ importante capire in che modo avviene il passaggio di dati da una pagina HTML al server Web, e in che modo questi vengono ricevuti ed elaborati in una pagina ASP CLIENT WEB SERVER (si-wwwdida.csr.unibo.it, 137.204.74.85) FrontFront-end (Web Browser) Application Logic (ASP Files) DATA SERVER (srvoracle.csr.unibo.it, 137.204.74.173) BackBack-end (Databases) 30 Inserimento di dati: i FORM n n n HTML mette a disposizione i FORM per creare maschere di inserimento dati da parte degli utenti Ogni FORM possiede un pulsante di SUBMIT attraverso il quale è possibile inviare i dati immessi L’URL della risorsa da richiedere al momento del SUBMIT è determinato dal valore dell’attributo ACTION nel tag che apre il FORM 31 Inserimento di dati: i FORM n Il file “form_aggiunta_cliente.htm” contiene la seguente porzione di codice HTML: Determina la modalità di passaggio dei valori per i campi del form URL da richiedere quando viene effettuato il SUBMIT […] <form method="get" action=“aggiungi_cliente.asp"> Codice Fiscale: <input type="text" size=25 maxlength=16 name="CFF"/><br> Nome e Cognome: <input type="text" size=25 maxlength=20 name="Nome"/><br> […] <input type="submit" value="Invia i dati" /> <input type="reset" value="Cancella i dati" /> <br> Genera il pulsante per Genera il pulsante per […] il SUBMIT del form il RESET del form 32 Metodo GET e metodo POST n n n Quando viene effettuato il SUBMIT di un form, il browser effettua una richiesta HTTP per la risorsa specificata come valore dell’attributo ACTION (esempio, “Write.asp”) Ogni richiesta HTTP specifica (1) un metodo, metodo ossia l’operazione che il server deve effettuare, e (2) una serie di parametri I metodi definiti da HTTP/1.1 sono 8: OPTIONS, HEAD, GET, GET POST, POST PUT, DELETE, TRACE, CONNECT http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html, paragrafi 9.3 (GET) e 9.5 (POST) 33 Metodo GET e metodo POST n n Esempio di richiesta HTTP con metodo GET: GET aprire il browser Web e digitare il seguente URL: http://djce.org.uk/dumprequest.html La pagina HTML mostra e spiega la richiesta HTTP che il browser ha inoltrato al server Web per ottenerla GET /dumprequest.html HTTP/1.1 Host: djce.org.uk User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; [...] Accept: application/xhtml+voice+xml;version=1.2, application/x-xhtml +voice+xml;version=1.2, text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/xxbitmap, */*;q=0.1 Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1 Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0 [...] n La pagina http://djce.org.uk/utils/echo-nocache.cgi, nocache.cgi invece, mostra in output il solo testo della richiesta HTTP effettuata 34 Metodo GET e metodo POST n n Quando viene specificato un URL sulla barra degli indirizzi il browser inoltra richieste HTTP utilizzando il metodo GET Il metodo GET serve per ottenere il contenuto della risorsa o l’output del processo elaborativo identificata/o dall’URL 35 Metodo GET e metodo POST n n Il metodo POST viene in genere utilizzato nelle richieste innescate dal submit di un form, benché il valore di default per l’attributo METHOD sia GET Il metodo POST serve per aggiungere i dati specificati nella richiesta come contenuto subordinato alla risorsa identificata dall’URL 36 Metodo GET e metodo POST n L’utility cURL (http://curl.haxx.se/) http://curl.haxx.se/ è un programma eseguibile da riga di comando che consente di inoltrare richieste HTTP La richiesta POST innescata dal submit del seguente form: <form method=“POST” action=“<URL richiesta>”> <input type=text name=“birthyear”> <input type=submit name=press value=“OK”> </form> può essere simulata tramite il seguente comando cURL: curl -d “birthyear=1905&press=%20OK%20” <URL richiesta> n Utilizzando http://djce.org.uk/dumprequest.html è possibile ottenere una descrizione (HTML) della richiesta POST effettuata; tramite http://djce.org.uk/utils/echo-nocache.cgi è invece possibile esaminarne il testo 37 Metodo GET e metodo POST n n n n La modalità con cui vengono trasmessi al server i valori dei campi del form varia a seconda del metodo utilizzato nella richiesta HTTP generata dal submit Ciò che non varia è il modo in cui vengono codificati i valori, ossia tramite una stringa contenente una serie di coppie nome=valore separate dal carattere ampersand (“&”) Nel caso di GET, GET questa stringa viene posta come suffisso dell’URL (e prende il nome di QueryString), QueryString dal quale è separata tramite un caratterere “?” Nel caso di POST, POST la stringa è contenuta come payload della richiesta HTTP, HTTP il cui Content-Type è impostato a “application/x-www-form-urlencoded” 38 GET e POST: un dump… n Modificare il file form_aggiunta_cliente.htm impostando il valore dell’attributo ACTION a: “http://djce.org.uk/utils/echo-nocache.cgi” n n Aprire la pagina form_aggiunta_cliente.htm con il browser Web, all’interno della propria virtual directory Inserire alcuni dati, effettuare il submit del form e osservare come il contenuto della risposta HTTP (il testo visualizzato dal browser) consista precisamente nel testo della corrispondente richiesta HTTP 39 GET e POST: un dump… n n n Modificare il file form_aggiunta_cliente.htm impostando il valore dell’attributo METHOD a “POST” Aprire la pagina form_aggiunta_cliente.htm con il browser Web, all’interno della propria virtual directory Inserire alcuni dati, effettuare il submit del form e osservare il contenuto della risposta 40 GET e POST: un dump… n n Ripristinare il contenuto originale del file form_aggiunta_cliente.htm impostando il valore dell’attributo METHOD a “GET” e il valore dell’attributo ACTION a “Write.asp” Il test effettuato mostra come i dati del form vengano tramessi tramite una stringa di coppie nome-valore separate da ampersand Metodo GET Metodo POST -> -> QueryString nell’URL Contenuto della richiesta 41 GET e POST: ricevere i dati n n n In ASP, la modalità di estrazione dei valori dei campi di un form dalla richiesta HTTP varia in funzione del metodo utilizzato Se si è utilizzato il metodo GET, GET tramite l’oggetto Request.QueryString è possibile accedere alle coppie nome-valore Se si è utilizzato il metodo POST, POST sempre tramite l’oggetto Request.Form è possibile accedere ai valori dei campi del form 42 GET e POST: ricevere i dati n Esaminare tramite notepad il sorgente del file form_output.asp: form_output.asp 'Se il metodo utilizzato nella form è GET If Request.ServerVariables("QUERY_STRING") <> "" Then Response.Write "<b>GET</b> ...” & Vbcrlf ... (UTILIZZO DELL’OGGETTO Request.QueryString) ... 'Se il metodo utilizzato nella form è POST If Request.ServerVariables("CONTENT_LENGTH") <> 0 Then %> <b>POST</b><br /><br /></font></p><hr /> ... (UTILIZZO DELL’OGGETTO Request.Form) ... n Esaminare tramite notepad il sorgente del file aggiungi_cliente.asp e osservare in che modo vengono estratti i valori dei campi 43 ASP: sintassi ed elaborazione n Il primo elemento sintattico di ogni file ASP è un’intestazione, racchiusa tra tag <% e %>, %> che dichiara il linguaggio di scripting utilizzato nelle successive sezioni di codice <% @LANGUAGE = VBScript %> n Nei nostri esempi faremo uso di VBScript, VBScript ma anche Javascript è supportato 44 ASP: sintassi ed elaborazione n Per migliorare la modularità di un progetto è sempre possibile incorporare le funzionalità comuni a più pagine ASP all’interno di un solo file .asp e importarlo laddove occorre <!--#include file="util.asp” --> n La riga di codice di cui sopra è presente in tutti i file .asp dell’applicazione eccetto util.asp: il grafo delle importazioni non può contenere cicli (se così fosse ci sarebbe un file che importa se stesso…) 45 ASP: sintassi ed elaborazione n n n n ASP consente di alternare sezioni di codice di script (procedurale), delimitate dai tag <% e %>, %> ad altre sezioni di codice HTML statico Permette di generare dinamicamente l’HTML da inviare in output al client come risultato di un’elaborazione Per scrivere sull’output dall’interno di una sezione di codice è sufficiente invocare la funzione Response.Write(stringa) Response.Write L’istruzione Response.Write(variabile) è equivalente Response.Write alla sezione di codice <%= variabile %> 46 ASP: sintassi ed elaborazione n Tra le altre cose, utilizzando le sezioni di codice di script risulta possibile: Dichiarare variabili in una sezione e utilizzarle o valorizzarle in una sezione successiva Concatenare stringhe (operatore &) & Comporre query dinamicamente concatenando porzioni di stringa prefissate con i valori di alcuni campi di un form Esprimere condizioni (If … Then … Else … End If) If Instaurare cicli di iterazione (For Each, Each While, While …) Utilizzare oggetti built-in per leggere e scrivere il valore di una variabile di sessione (Session(“…”)) Dichiarare e invocare funzioni (Sub … End Sub) Sub … 47 ASP: sintassi ed elaborazione n Alcune operazioni e proprietà di oggetti built-in: Oggetto Response Oggetto Request Oggetto Server Oggetto Session Oggetto Application – – – – – – – – – – – – – – Response.Write(“…”) Response.Redirect(“…”) Response.Clear() Response.ContentType [ = “…” ] Request.Form(“…”) o Request.Form(i) Request.QueryString(“…”) o Request.QueryString(i) Request.Cookies(“…”) o Request.Cookies(i) Request.ServerVariables(<key>) (esistono 54 chiavi) Server.Execute(“…”) Server.MapPath(“…”) Server.CreateObject(<Nome.Classe>) Session(“…”) [ = value ] Session.Abandon() Application(“…”) [ = value ] 48 Architettura – ASP e DB n All’interno di una sezione di codice script in un file .asp è possibile creare oggetti ActiveX (Server.CreateObject) tramite i quali gestire l’interazione tra l’applicazione Web e il DB (ActiveX Data Objects, Objects ADO) CLIENT WEB SERVER (wwwdida.csr.unibo.it 137.204.74.39) FrontFront-end (Web Browser) Application Logic (ASP Files) DATA SERVER (srvoracle.csr.unibo.it, 137.204.74.173) BackBack-end (Databases) 49 Flashback 2: ADO e DB n Come accedere a una fonte dati con ADO 1. 2. 3. 4. 5. 6. 7. 8. 9. Connessione con data source (Connection). Connection Opzionalmente, iniziare una transazione Opzionalmente, creare un oggetto per rappresentare un comando SQL (Command) Command Opzionalmente, specificare colonne, tabelle, e valori della query SQL come parametri variabili (Parameter) Parameter Eseguire il comando (Command, Command Connection, Connection o Recordset) Recordset Se il comando è “row-returning”, memorizzare le righe in un oggetto contenitore (Recordset) Recordset Opzionalmente, creare una vista per ordinare, filtrare e navigare i dati (Recordset) Recordset Modificare i dati: aggiungere, cancellare, modificare righe e colonne (Recordset) Recordset Se appropriato, aggiornare il data source con le modifiche eseguite (Recordset) Recordset In caso di transazione, accettare o rigettare i cambiamenti prima di terminare la transazione (Connection) Connection 50 Stabilire una connessione n n n Modificare la connection string all’interno del file util.asp inserendo UID e PWD relative al proprio gruppo La connection string viene utilizzata in ADO (ActiveX Data Object) per aprire una connessione ad un DB Aprire il browser e digitare l’URL del file principale index.asp 51 Impostare la connection string n La connection string è una lista di coppie nomevalore che fornisce i parametri per l’accesso alla sorgente di dati. In primis: Fornisce le credenziali di accesso Specifica la locazione della sorgente n Differenti sistemi possono richiedere parametri differenti. E’ possibile configurare separatamente dei DSN (Data Source Name) da utilizzare all’interno di una connection string 52 Eseguire un’interrogazione n Si esamini il file leggi_clienti.asp (incipit) CREA IL RECORDSET PER LE (EVENTUALI EVENTUALI) TUPLE RESTITUITE Set rs1 = Server.CreateObject(“ADODB.Recordset”) IMPOSTA LA CONNECTION STRING (v. file util.asp) rs1.ActiveConnection = conn_oracle_STRING IMPOSTA LA QUERY SQL ASSOCIATA AL RECORDSET rs1.Source = "SELECT * FROM Clienti WHERE C_Nazione='Italia';" IMPOSTA IL TIPO DI CURSORE (forward forward--only=0, keyset=1, dynamic=2, static=3) static=3 rs1.CursorType = 0 IMPOSTA LA LOCAZIONE DEL CURSORE (server server side=2, client side=3) side=3 rs1.CursorLocation = 2 IMPOSTA IL LIVELLO DI ISOLAMENTO (read read--only=1, pessimistic=2, optimistic=3, batchbatch-optimistic=4) optimistic=4 rs1.LockType = 1 ESEGUE LA QUERY rs1.Open() 53 Eseguire un’interrogazione n Si esamini il file leggi_clienti.asp (più avanti) APRE LA TABELLA HTML CHE FORMATTA I RECORD LETTI DAL DATABASE <table> ITERA SU TUTTE LE TUPLE (CLIENTI) ALL’INTERNO DEL RECORDSET <% While (NOT rs1.EOF) %> POPOLA LA TABELLA EMETTENDO UNA RIGA PER OGNI RECORD <tr><td><A HREF="vedi_cliente.asp?CFC= <%=(rs1.Fields.Item("C_CF").Value)%>”> <%=(rs1.Fields.Item("C_CF").Value)%></A></td> <td><%=(rs1.Fields.Item("c_NOME").Value)%></td> [...] </tr> PASSA AL RECORD SUCCESSIVO E CONCLUDE IL CICLO <% rs1.MoveNext() Wend CHIUDE IL RECORDSET, RECORDSET LIBERA LE RISORSE E TERMINA LA TABELLA rs1.Close() Set rs1 = Nothing %> </table> 54 FORM di autenticazione n n Oltre all’esecuzione di query SQL il cui testo è determinato staticamente, staticamente risulta spesso utile comporre dinamicamente query SQL utilizzando parametri provenienti da un form Si esamini il file autenticazione.asp (incipit) MyQuery = “SELECT C_NOME, C_NAZIONE, C_PASSWORD FROM CLIENTI _ WHERE C_CF=‘” + Request.QueryString.Item(“CFC”) + “’ AND C_PASSWORD=‘” + Request.QueryString.Item(“PWD”) + “’;” Set rs1 = Server.CreateObject(“ADODB.Recordset”) [...] rs1.Open() 55 Utilizzo di variabili di sessione n In un generico sistema di autenticazione (vedi file autenticazione.asp) autenticazione.asp è possibile tenere traccia dell’esito della procedura di login utilizzando delle variabili di sessione <% If Err <> 0 or rs1.EOF Then %> EMETTE UN MESSAGGIO DI ERRORE IN CASO DI FALLIMENTO Codice Fiscale o Password non valida <% Err.Clear On Error Goto 0 %> <% Else IMPOSTA VARIABILI DI SESSIONE PER TENERE TRACCIA DEL LOGIN Session("Nome") = rs1.Fields.Item("C_NOME").Value Session("Nazione") = rs1.Fields.Item("C_NAZIONE").Value %> Benvenuto: <%= Session("Nome") %> <% End if %> 56 Utilizzo di variabili di sessione n Ciascuna pagina ASP può allora verificare se il login è stato effettuato recuperando il valore delle suddette variabili index.asp Buongiorno <% If Session(“Nome”)<>“” Then Response.Write(“<B><FONT COLOR='red'>” & Session(“Nome”) & “</FONT></B>”) End If %> ! Ecco le funzioni disponibili: logout.asp Arrivederci <%= Session("Nome") %> la sessione è stata terminata <% Session.Abandon %> 57