• Non ci sono risultati.

MODULO 1

N/A
N/A
Protected

Academic year: 2021

Condividi "MODULO 1"

Copied!
15
0
0

Testo completo

(1)

MODULO 1

PARTE 3

Programmazione (scripting) server-side con PHP

3.a

Goy - a.a. 2009/2010 Programmazione Web 1

3.a

HTTP request e HTTP response (form e link)

Vi ricordate?

Un HTTP Server gestisce 2 flussi di informazioni:

• HTTP request: le richieste in arrivo dai client

• HTTP response: le risposte del server, inviate ai client

Gli oggetti HTTP request e HTTP response - I

HTTP response: le risposte del server, inviate ai client

In particolare...

• L'oggetto HTTP request contiene tutte le informazioni relative alla richiesta che il client (browser) fa al server: l'indicazione di un URL (o di una pagina) + eventuali dati

• L’oggetto HTTP response contiene varie informazioni

Goy - a.a. 2009/2010 Programmazione Web 2

L oggetto HTTP response contiene varie informazioni

che il server invia, in risposta, al client (codice di stato

del server, eventuali metadati, ... nello Header e

contenuto - per es. la pagina web richiesta - nel

Body)

(2)

Gli oggetti HTTP request e HTTP response - II

Server client

request response

Gli script server-side possono interagire con vari "oggetti" tra

Per esempio, l'oggetto HTTP request contiene tutte le

informazioni relative alla richiesta che il client (browser) fa al Web server

Per es: l'utente compila un modulo on-line (formHTML); quando clicca sul pulsante di invio del modulo, parte la richiesta al server; l'oggetto

Gli script server-side possono interagire con vari oggetti , tra cui HTTP request e HTTP response

Goy - a.a. 2009/2010 Programmazione Web 3

p , p ; gg

request conterrà varie informazioni relative alla richiesta del client, tra cui tutti i dati del modulo (per es: i nomi dei campi e i rispettivi valori)

L'oggetto response viene utilizzato dal Web server per inviare informazioni al client (browser)

PHP: l’oggetto HTTP response - I

<?php

Web Server browser

HTTP request

HTTP response p p

echo "Hello!";

?>

<?php

print "Ciao!";

?>

echo e print scrivono nel Body dell'oggetto HTTP response

NOTA h i t i l ti l' i diff è

NOTA: echo e print sono equivalenti: l'unica differenza è che echo funziona anche con più stringhe (separate da una virgola: echo "pippo", "pluto", ...)

(3)

PHP: l’oggetto HTTP response - II

Digressione su HTTP response

Nelle pagine PHP è possibile intervallare linee di script e linee di codice HTML, per es:

<?php

if ($ POST["risposta"]=="si") {

if ($_POST[ risposta ] si ) {

?>

<P ALIGN="CENTER">Bravo!</P>

<?php

} else {

?>

<P ALIGN="CENTER">Peccato!</P>

<?php }

?>

oppure (equivalentemente) utilizzare echo per scrivere HTML:

Goy - a.a. 2009/2010 Programmazione Web 5

pp ( q ) p

<?php

if ($_POST["risposta"]=="si") { echo "<P ALIGN='CENTER'>Bravo!</P>"

} else {

echo "<P ALIGN='CENTER'>Peccato!</P>"

}

?>

PHP: l’oggetto HTTP response - III

NOTA: Attenzione agli apici!!!

HTML:

<P ALIGN="CENTER">CONGRATULAZIONI!</P>

PHP

PHP:

echo "<P ALIGN='CENTER'>OK!</P>";

oppure echo "<P ALIGN=\"CENTER\">OK!</P>";

Goy - a.a. 2009/2010 Programmazione Web 6

(4)

Ripasso di HTML : <form...> - I

In HTML, un form o modulo on-line (tag

<form...>

) contiene:

1. metodo (attributo

METHOD

del tag

<FORM...>

) = modo in cui vengono codificati i dati da inviare al g server

2. campi di input (tag

<INPUT...>

e altri) = elementi attraverso cui l'utente fornisce dei dati

3. azione (attributo

ACTION

del tag

<FORM...>

) = script (o programma) che "raccoglie" ed "elabora" i dati contenuti nel form

Goy - a.a. 2009/2010 Programmazione Web 7

Ripasso di HTML : <form...> - II

Come funziona un form?

<HTML><BODY>

<FORM METHOD="POST" ACTION="identif.php" >

Login: <INPUT TYPE="TEXT" NAME="login"/>

Password: <INPUT TYPE="PASSWORD" NAME="pwd"/>

<INPUT TYPE="Submit" VALUE="OK"/>

</FORM>

</BODY></HTML>

Quando l'utente fa click sul pulsante il modulo viene

inviato al server... cosa vuol dire?

(5)

Viene costruita una HTTP request che contiene:

• l'indicazione della risorsa (per es. pagina PHP) che contiene il programma (per es. lo script PHP) che

"gestirà" i dati (attributo

ACTION

)

Ripasso di HTML: <form...> - III

• i dati (parametri), nella forma di coppie <nome,

valore> (tag <INPUT...>

e altri), codificati secondo il metodo prescelto (attributo

METHOD

)

Nell'esempio precedente, HTTP request contiene:

risorsa = identif.php parametri: <login, admin>

<pwd pippo>

Goy - a.a. 2009/2010 Programmazione Web 9

<pwd, pippo>

NB nella form, tutti i campi (tag

<INPUT...>

e altri) sono caratterizzati da:

• nome = attributo

NAME

(o

ID

) del tag

• valore = ciò che l'utente ha scritto/selezionato

Tipi di campi (tag

<INPUT...>

):

• Caselle di testo

<INPUT TYPE="text" NAME="login"/>

• Caselle di testo per password

Ripasso di HTML: <form...> - IV

• Caselle di testo per password

<INPUT TYPE="password" NAME="pwd"/>

• Pulsanti di opzione (radio button)

<INPUT TYPE="radio" NAME="accetto" value="si"/>

<INPUT TYPE="radio" NAME="accetto" value="no"/>

NB sono mutuamente esclusivi!!!

• Caselle di controllo (checkbox)

NB stesso nome!

NB t !

Goy - a.a. 2009/2010 Programmazione Web 10

• Caselle di controllo (checkbox)

<INPUT TYPE="checkbox" NAME="interessi[]" value="cinema"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="teatro"/>

NB non sono mutuamente esclusivi!!!

⇒ devo "raccoglierli" in un array (

interessi[]

)!!!

NB stesso nome!

(6)

• Campi nascosti

<INPUT TYPE="hidden" NAME="utente" value="pippo"/>

non vengono visualizzati nella pagina, ma vengono inclusi in

HTTP request: <utente, pippo>

P l t di i i ( b it)

Ripasso di HTML: <form...> - V

• Pulsante di invio (submit)

<INPUT TYPE="submit" value="invia"/>

• Pulsante di reset

<INPUT TYPE="reset" value="reset"/>

NB Il tag

<INPUT...>

ha altri attributi opzionali, per esempio:

Goy - a.a. 2009/2010 Programmazione Web 11

<INPUT TYPE="text" NAME="login" value="pippo" size="4"/>

<INPUT TYPE="checkbox" NAME="interessi" value="cinema"

checked/> [NB checkedchecked="true"]

Inoltre, all'interno di un form è possibile usare

• Aree di testo

<TEXTAREA NAME="msg" cols="20" row="5"></textarea>

Ripasso di HTML: <form...> - V

• Caselle combinate (select)

<SELECT NAME="job">

<option value="null"></option>

<option value="imp">impiegato</option>

<option value="ins">insegnante</option>

</select>

(7)

PHP: l’oggetto HTTP request – I

All'interno di HTTP request i dati (parametri) possono essere codificati in due modi diversi (attributo

METHOD

del tag

<FORM...>

):

• GET: i dati (parametri), cioè le coppie <nome, valore>, (p ), pp , sono scritti in coda alla risorsa ⇒ saranno quindi visibili nell'URL (nella barra degli indirizzi del browser)

Nell'esempio, HTTP request contiene:

risorsa = identif.php?login=admin&pwd=pippo

• POST: i dati (parametri), cioè le coppie <nome, valore>, sono scritti all'interno del corpo di HTTP request ⇒ non

i di i ibili ll b d li i di i i d l

Goy - a.a. 2009/2010 Programmazione Web 13

saranno quindi visibili nella barra degli indirizzi del browser

Nell'esempio, HTTP request contiene:

risorsa = identif.php

parametri: <login, admin> <pwd, pippo>

PHP: l’oggetto HTTP request – II

Come faccio (dallo script contenuto nella pagina PHP indicata nell'attributo

ACTION

del tag

<FORM...>

) a leggere i parametri contenuti in HTTP request?

I parametri sono resi disponibili a PHP all'interno di due

i i i I i l

array associativi:

$_GET[]

e

$_POST[].

In particolare:

• se il metodo utilizzato è

GET

, i parametri sono memorizzati nell'array associativo

$_GET[]

• se il metodo utilizzato è

POST

, i parametri sono memorizzati nell'array associativo

$_POST[]

admin

login $_GET["login"]→"admin"

$ GET[" d"]→" i "

Goy - a.a. 2009/2010 Programmazione Web 14

admin pippo

...

login pwd

...

chiavi valori

$_GET["pwd"]→"pippo"

...

oppure

$_POST["login"]→"admin"

$_POST["pwd"]→"pippo"

...

(8)

PHP: l’oggetto HTTP request – III

NB1

Il nome del parametro in HTTP request, e quindi la chiave all'interno dell'array

$_GET[]

o

$_POST[]

, è dato dal valore dell'attributo

NAME

nel tag

<INPUT...>

(o

<TEXTAREA...>

o

)

<SELECT...>

):

<FORM METHOD="POST" ...>

<INPUT TYPE="text" NAME="login"/> → $_POST["login"]

NB2

Visto che, utilizzando il metodo GET, i dati sono visibili nella barra degli indirizzi del browser, non usate GET per trasmettre password o dati sensibili!

Goy - a.a. 2009/2010 Programmazione Web 15

trasmettre password o dati sensibili!

PHP: l’oggetto HTTP request – IV

NB3

Nel caso delle checkbox il parametro non è una semplice coppia <nome, valore>, ma un array che contiene tutti i valori selezionati dall'utente; per es:

<FORM METHOD="POST" >

<FORM METHOD="POST" ...>

<INPUT TYPE="checkbox" NAME="interessi[]" value="cinema"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="teatro"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="musica"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="sport"/>

L'array contiene solo le checkbox selezionate!!!

$_POST["interessi"]→ cinema teatro musica

0 1 2

NB senza []!!!

Per leggere i valori selezionati dall'utente devo utilizzare un ciclo sull'array; in PHP, per esempio:

$int = $_POST["interessi"];

(9)

PHP: l’oggetto HTTP request – V

Esempio1: form per inviare login e password (

es-form1.html

)

<FORM METHOD="POST" ACTION="identif1.php">

Login: <INPUT TYPE="TEXT" NAME="login"/>

Password: <INPUT TYPE="PASSWORD" NAME="pwd"/>

<INPUT TYPE="Submit" VALUE="OK"/> ...

/FORM

VEDI es-form1.html VEDI identif1.php

</FORM>

Quando il server riceve la richiesta, chiede all'interprete PHP di eseguire lo script contenuto nella pagina indicata in HTTP request (

identif1.php

)

<?php

$id = $_POST["login"];

$pass = $_POST["pwd"];

if ($id = = "admin" && $pass = = "pippo") {

Goy - a.a. 2009/2010 Programmazione Web 17

($ $p p pp ) {

echo "Benvenuto amministratore!";

} else {

echo "Gentile ".$id.", login e password sono sbagliati...";

}

?>

PHP: l’oggetto HTTP request – VI

• Nella cartella corsoPW creiamo due nuovi file es-form1.html e identif1.php in cui inseriamo il form e lo script precedenti (oppure li scarichiamo da www.di.unito.it/~goy/corsoPW-0910.html

,

esempi scripting server side)

VEDI es-form1.html VEDI identif1.php

esempi scripting server-side)

• Avviamo il Web client, cioè il browser, e ci connettiamo al web server, richiedendo la pagina es-form1.html; per fare ciò digitiamo nella barra degli indirizzi l'URL(*):

http://localhost:8080/corsoPW/es-form1.html

• Cliccando poi sul pulsante OK, partirà una HTTP request al server, contenente la richiesta per identif1.php e i parametri del form…

Goy - a.a. 2009/2010 Programmazione Web (*)A casa, senza :8080 !!!

18

(10)

PHP: l’oggetto HTTP request – VII

Esempio2: form di registrazione (

es-form2.html

)

<FORM METHOD="POST" ACTION="identif2.php" >

Nome: <INPUT TYPE="TEXT" NAME="nome"/>

Cognome: <INPUT TYPE="TEXT" NAME="cognome"/>

Età: <SELECT NAME="eta">

<OPTION VALUE="meno20">meno di 20</OPTION>

/

VEDI es-form2.html VEDI identif2.php

<OPTION VALUE="tra20e40">tra 20 e 40</OPTION>

<OPTION VALUE="tra40e60">tra 40 e 60</OPTION>

<OPTION VALUE="piu60">più di 60</OPTION>

</SELECT>

<INPUT TYPE="RADIO" NAME="sesso" VALUE="m"/> M

<INPUT TYPE="RADIO" NAME="sesso" VALUE="f"/> F Interessi:

<INPUT TYPE="CHECKBOX" NAME="interessi[]" VALUE="cinema"/>

Cinema

<INPUT TYPE="CHECKBOX" NAME="interessi[]" VALUE="teatro"/>

Goy - a.a. 2009/2010 Programmazione Web 19

Teatro

<INPUT TYPE="CHECKBOX" NAME="interessi[]" VALUE="musica"/>

Musica

<INPUT TYPE="CHECKBOX" NAME="interessi[]" VALUE="sport"/>

Sport

<INPUT TYPE="Submit" VALUE="OK"/> ...

</FORM>

PHP: l’oggetto HTTP request – VIII

Quando il server riceve la richiesta, chiede all'interprete PHP di eseguire lo script contenuto nella pagina indicata in HTTP request (

identif2.php

)

<?php

$n = $ POST["nome"];

VEDI es-form2.html VEDI identif2.php

$n = $_POST[ nome ];

$c = $_POST["cognome"];

$s = $_POST["sesso"];

$int = $_POST["interessi"];

echo "<P ALIGN='CENTER'>";

echo "<B>nome</B>: ".$n."<BR>";

echo "<B>cognome</B>: ".$c."<BR>";

echo "<B>sesso</B>: ".$s."<BR>";

echo "<B>interessi</B>: ";

foreach ($int as $i) { foreach ($int as $i) {

echo $i . ", ";

}

echo "</P>";

(11)

PHP: l’oggetto HTTP request – IX

• Nella cartella corsoPW creiamo due nuovi file es-form2.html e identif2.php in cui inseriamo il form e lo script precedenti (oppure li scarichiamo da www.di.unito.it/~goy/corsoPW-0910.html

,

esempi scripting server side)

VEDI es-form2.html VEDI identif2.php

esempi scripting server-side)

• Avviamo il Web client, cioè il browser, e ci connettiamo al web server, richiedendo la pagina es-form2.html; per fare ciò digitiamo nella barra degli indirizzi l'URL(*):

http://localhost:8080/corsoPW/es-form2.html

• Cliccando poi sul pulsante OK, partirà una HTTP request al server, contenente la richiesta per identif2.php e i parametri del form…

Goy - a.a. 2009/2010 Programmazione Web (*)A casa, senza :8080 !!!

21

PHP: l’oggetto HTTP request – X

Esempio3: un diverso uso delle caselle di controllo (checkbox) (

es-form3.html

)

Se, nel form, assegno nomi diversi alle caselle di controllo, posso sfruttare i nomi, anziché i valori...

<FORM METHOD "POST" ACTION "id tif3 h " >

VEDI es-form3.html VEDI identif3.php

<FORM METHOD="POST" ACTION="identif3.php" >

Interessi:

<INPUT TYPE="CHECKBOX" NAME="cinema"/> Cinema

<INPUT TYPE="CHECKBOX" NAME="teatro"/> Teatro

<INPUT TYPE="CHECKBOX" NAME="musica"/> Musica

<INPUT TYPE="CHECKBOX" NAME="sport"/> Sport

<INPUT TYPE="Submit" VALUE="OK"/> ...

</FORM>

⇒ cosa viene scritto in

$ POST

?

Goy - a.a. 2009/2010 Programmazione Web 22

⇒ cosa viene scritto in

$_POST

?

<cinema, ON> <teatro, ON> <musica, ON>

(cioè solo le checkbox selezionate, con valore =

ON

)

(12)

$_POST

è un array associativo, in cui:

chiavi = nomi del campi del modulo (form) valori = valori scritti/selezionati dall'utente

array keys($ POST)

→ nomi dei campi

PHP: l’oggetto HTTP request – XI

VEDI es-form3.html VEDI identif3.php

y_ y ($_ )

p

array_values($_POST)

→ valori

$_POST

array_values($_POST)

In

identif3.php

leggiamo le checkbox selezionate (e, in questo esempio, le stampiamo a schermo):

<?php

echo "Interessi = ";

foreach (array_keys($_POST) as $campo) { echo $campo " ";

Goy - a.a. 2009/2010 Programmazione Web 23

echo $campo.", ";

}

?>

NB Non fatelo con i pulsanti di opzione (radio button) altrimenti perdete la mutua esclusione!!!

chiavi

PHP: l’oggetto HTTP request – XII

• Nella cartella corsoPW creiamo due nuovi file es-form3.html e identif3.php in cui inseriamo il form e lo script precedenti (oppure li scarichiamo da www.di.unito.it/~goy/corsoPW-0910.html

,

esempi scripting server side)

VEDI es-form3.html VEDI identif3.php

esempi scripting server-side)

• Avviamo il Web client, cioè il browser, e ci connettiamo al web server, richiedendo la pagina es-form3.html; per fare ciò digitiamo nella barra degli indirizzi l'URL(*):

http://localhost:8080/corsoPW/es-form3.html

• Cliccando poi sul pulsante OK, partirà una HTTP request al server, contenente la richiesta per identif3.php e i parametri del form…

(*)A casa, senza :8080 !!!

(13)

PHP: l’oggetto HTTP request – XIII

Esempio4: accedere ai dati "senza chiamarli per nome"

(

es-form4.html

,

identif4.php

)

<FORM METHOD="POST" ACTION="identif4.php" >

Nome: <INPUT TYPE="TEXT" NAME="nome"/>

Cognome: <INPUT TYPE="TEXT" NAME="cognome"/>

Indirizzo: <INPUT TYPE="TEXT" NAME="indirizzo" SIZE="40"/>

VEDI es-form4.html VEDI identif4.php

Indirizzo: <INPUT TYPE="TEXT" NAME="indirizzo" SIZE="40"/>

Telefono: <INPUT TYPE="TEXT" NAME="telefono"/>

Professione: <SELECT NAME="prof">

<OPTION VALUE="impiegato">impiegato</OPTION>

<OPTION VALUE="lav_aut">lavoratore autonomo</OPTION>

<OPTION VALUE="insegnante">insegnante</OPTION>

<OPTION VALUE="altro">altro</OPTION>

</SELECT>

<INPUT TYPE="Submit" VALUE="OK"/> ...

</FORM>

Goy - a.a. 2009/2010 Programmazione Web 25

<?php

foreach (array_keys($_POST) as $campo ) { echo "<P>" . $campo . " = ";

$valore = $_POST[$campo];

echo $valore . "</P>“;

}

?>

chiavi

valori

PHP: l’oggetto HTTP request – XIV

• Nella cartella corsoPW creiamo due nuovi file es-form4.html e identif4.php in cui inseriamo il form e lo script precedenti (oppure li scarichiamo da www.di.unito.it/~goy/corsoPW-0910.html

,

esempi scripting server side)

VEDI es-form4.html VEDI identif4.php

esempi scripting server-side)

• Avviamo il Web client, cioè il browser, e ci connettiamo al web server, richiedendo la pagina es-form4.html; per fare ciò digitiamo nella barra degli indirizzi l'URL(*):

http://localhost:8080/corsoPW/es-form4.html

• Cliccando poi sul pulsante OK, partirà una HTTP request al server, contenente la richiesta per identif4.php e i parametri del form…

Goy - a.a. 2009/2010 Programmazione Web (*)A casa, senza :8080 !!!

26

(14)

PHP: include

[digressione che ci sarà utile tra poco...]

In una pagina PHP è possibile includere file contenenti parte del codice della pagina

→ vengono spesso usati per inserire codice che verrà

riutilizzato in altre pagine .php, come per es. intestazioni e

h

piè di pagina, o connessioni a database

Possono contenere codice HTML, script client-side (es:

JavaScript), script server-side (es: PHP)

Hanno generalmente l'estensione .php o .html o .inc Per includere un file :

Goy - a.a. 2009/2010 Programmazione Web 27

Per includere un file :

<?php include("percorso/nomefile") ?>

nel punto in cui si vuole inserire il codice contenuto nel file esterno; l'interprete farà una specie di "copia&incolla" del contenuto del file incluso all'interno della pagina PHP

PHP: l’oggetto HTTP request – XV

In alternativa ai form, è possibile inviare dati al server accodandoli all'URL in un link (in questo caso i valori saranno "fissi"...); per esempio:

es-param.php:

<?php include("quiz html") ?>

VEDI es-param.php VEDI quiz.html

<?php include( quiz.html ) ?>

quiz.html

:

<P ALIGN="CENTER">

Come si chiama il figlio di Tex? <BR><BR>

<A HREF="param.php?risposta=alan">Alan</A> <BR>

<A HREF="param.php?risposta=kit">Kit</A> <BR>

<A HREF="param.php?risposta=john">John</A>

</P>

NB i d ti i i ti il t d GET

NB i dati sono inviati con il metodo GET ⇒ saranno

disponibili nell'array associativo

$_GET[]

(15)

PHP: l’oggetto HTTP request – XVI

Lo script contenuto in

param.php

legge la risposta (il parametro "risposta"): se è sbagliata, ripropone il quiz; se è corretta gli invia un messaggio di congratulazioni...

<?php

VEDI param.php

p p

$risp = $_GET["risposta"];

if ($risp = = "kit") {

echo "<P ALIGN='CENTER'>CONGRATULAZIONI!</P>";

} else {

echo "<P ALIGN='CENTER'>Risposta sbagliata:

riprova!</P>";

include("quiz.html");

}

Goy - a.a. 2009/2010 Programmazione Web 29

?>

NB Se devo inviare più parametri, li separo con &, per es:

<A HREF="param.php?utente=".$ut."&risposta=kit">Kit</A>

(ipotizzando che la variabile

$ut

contenga l'id dell'utente...)

PHP: l’oggetto HTTP request – XVII

• Nella cartella corsoPW creiamo tre nuovi file es-param.php, quiz.html e param.php in cui inseriamo i link e gli script precedenti (oppure li scarichiamo dawww di unito it/~goy/corsoPW 0910 html

VEDI es-param.php VEDI quiz.html VEDI param.php

(oppure li scarichiamo da www.di.unito.it/~goy/corsoPW-0910.html

,

esempi scripting server-side)

• Avviamo il Web client, cioè il browser, e ci connettiamo al web server, richiedendo la pagina es-param.php; per fare ciò digitiamo nella barra degli indirizzi l'URL(*):

http://localhost:8080/corsoPW/es-param.php

• Cliccando poi su uno dei link, partirà una HTTP request al server,

l i hi h il

Goy - a.a. 2009/2010 Programmazione Web

contenente la richiesta per param.php e il parametro…

(*)A casa, senza :8080 !!!

30

Riferimenti

Documenti correlati

L’invio dei dati avviene in due passi distinti: prima viene contattata la pagina sul server che deve elaborare i dati, e poi vengono inviati i dati stessi Per questo motivo

Specifiche di Stile In-line Sono annidate direttamente negli elementi HTML tramite l’ attributo style:. DB

z Il client è un qualsiasi programma che invia una richiesta e aspetta una risposta; tipicamente termina dopo avere usato un server un numero finito di volte. z Il server aspetta

Infatti, a questo punto, si può scegliere l'ultima opzione per la configurazione automatica, quella centrale per quella manuale (in tal caso bisogna selezionare View per una

Se viene usato un tool di monitoring del server in grado di registrare alcuni dati statistici a livello di sistema, come l'utilizzo della CPU, l'I/O su disco e la cache di

• Questa entità è utile quando ad uno stesso nome rispondono più server; in questo modo si mantiene la struttura logica di un server &#34;distribuito&#34; in modo che l'utente lo

Vi è una connessione permanente tra client e server nel momento in cui si accede al server, e fino a che il cliente non fa cadere esplicitamente la connessione.. E-MAIL

Quando un browser richiede una ASP, il server Web genera una pagina contenente codice HTML e immediatamente lo invia indietro al browser – in questo modo consente agli utenti web