|
Session è un oggetto che permette di salvare informazioni riguardanti l'utente per tutta la sua navigazione nel nostro sito. Questa funzionalità è ottenibile grazie al fatto che ASP è in grado di identificare ogni singola sessione di ogni singolo utente con un numero univoco (chiamato ID) che viene scritto in un cookie del browser. È quindi importante che l'utente non utilizzi una versione troppo vecchia del browser, in quanto potrebbe non supportare questa funzione.
La possibilità di conservare informazione attraverso le pagine è molto utile quando alcune nozioni devono essere disponibili ad ogni pagina.
Una variabile può essere creata nell'oggetto Session in maniera molto semplice:
Session("nome") = "mio nome"
Con altrettanta facilità la variabile può essere ritornata dall'oggetto:
sNome = Cstr(Session("nome"))
Come potete vedere effettuo il casting a String del valore ritornato. Questo è necessario siccome l'oggetto ritornato da Session è di tipo Variant(generico). Di norma ASP è in grado di convertire automaticamente l'oggetto da Object a String (o qualsiasi tipo di variabile), ma esperienza lavorative mi hanno mostrato che questo non sempre accade e ci sono alcune volte in cui l'assegnamento senza casting genera un errore, causando perdita di tempo nel cercare di
correggere un codice che sulla carta dovrebbe funzionare perfettamente. Dopo questa spiacevole esperienza utilizzo sempre il casting e consiglio a tutti di fare lo stesso.
Le informazioni contenute in Session rimangono memorizzate sino a quando l'utente non lascia il sito, il suo SessionTimeOut (il tempo massimo che può intercorrere tra la richiesta di due pagine) o fino a quando il metodo Session.Abandon non è chiamato. Come si può intuitivamente capire il metodo Abandon forza l'applicazione ad invalidare la sessione e distrugge tutte le informazioni memorizzate.
L'oggetto Session viene utilizzato da tutti gli utenti del sito è può consumare risorse in maniera seria qualora il numero degli utenti sia molto alto. Consiglio caldamente di memorizzare solo variabili primitive e non oggetti, onde evitare di far collassate il server per eccessivo uso di risorse.
Come esempio pratico per l'utilizzo dell'oggetto Session implementeremo ancora una volta l'esempio Request1.asp e l'esempio Request2.asp. Questa volta aggiungeremo alla seconda pagina una nuova form in cui chiederemo all'utente di inserire la propria età. Una volta spedita la form, all'utente verrà mostrato il suo nome, il suo cognome e la sua età. La novità sta nel fatto che il nome e cognome non verranno passate nella terza pagina come valori della form. Essi verranno memorizzati nell'oggetto session dell'utente e verrano recuperati nella terza pagina utilizzando, ancora una volta, l'oggetto
session.
<html>
<head>
<title>Session 1</title>
</head>
<body>
<form name="test" action="session2.asp" method="post">
nome: <input type="text" name="txtFirstName" value=""><br>
cognome: <input type="text" name="txtLastName" value=""><br>
<input type="submit" value="Invia">
</form>
</body>
</html> |
Listato 7 - Salvate la pagina con il nome Session1.asp
<% Option Explicit
Dim sNome
dim sCognome
sNome = request.form("txtFirstName")
sCognome = request.form("txtLastName")
Session("nome") = sNome
Session("cognome") = sCognome
%>
<html>
<head>
<title>Session 2</title>
</head>
<body>Hai inserito i seguenti dati ...<br>
nome: <%= sNome%><br>
cognome: <%= sCognome%><br>
Inserisci ora la tua età ...
<form name="test" action="session3.asp" method="post">età
<input type="text" name="txtAge" value=""><br>
<input type="submit"><input type="reset" value="Reset">
</form>
</body>
</html> |
Listato 8 - Salvate la pagina con il nome Session2.asp
<% Option Explicit
Dim sNome
Dim sCognome
Dim sEta
sNome = Session("nome")
sCognome = Session("cognome")
sEta = Request.Form("txtAge")
%>
<html>
<head>
<title>Session 3</title>
</head>
<body>Hai inserito i seguenti dati ...<br>
nome: <%= sNome%><br>
cognome: <%= sCognome%><br>
età: <%= sEta %>
</body>
</html> |
Listato 9 - Salvate la pagina con il nome Session3.asp
Lezione
successiva =>
Torna
all'indice!
|