|
ASP: la guida introduttiva
Capitolo 13 - L'oggetto built-in Session
13.0 Scopo e
utilizzo dell'oggetto Session
13.1 Funzionamento
interno di un oggetto Session
13.2 La
proprietà Session.Timeout
13.3 Il
metodo Session.Abandon
13.0 - Scopo e utilizzo dell'oggetto Session
Session, il quarto oggetto built-in
sul percorso di questa guida, consente di gestire le
informazioni relative alla sessione di un utente. Si supponga di
utilizzare una normale pagina ASP contenente la seguente riga di
codice JScript:
var stringa = "Ciao, come stai?";
La
variabile stringa appena dichiarata
ha un ciclo di vita che termina nell'esatto momento in cui
l'interprete raggiunge la fine del codice scritto. In poche
parole questo significa che, tendando di richiamare la variabile
citata all'interno di un secondo documento, si otterrà un
errore, in quanto risulterà non definita. Questo perchè ciascuno
script non è in grado di vedere le variabili utilizzate da altri
script, e quindi nemmeno di condividerle con essi.
Molto spesso, però, alcuni particolari tipi di applicazione Web
richiedono che alcuni dati possano essere trasportati da una
pagina ad un'altra. Si immagini, ad esempio, il classico
"carrello della spesa" utilizzato in tutti i negozi virtuali.
L'utente che stabilisce di acquistare un prodotto lo inserisce
in maniera figurata all'interno del proprio carrello e quindi
abbandona la pagina utilizzata allo scopo, magari per andare
alla ricerca di altri prodotti. Quando il suo giro sarà
completo, l'utente accederà al documento utile per ordinare
quanto scelto precedentemente. Come fare a questo punto per
sapere cosa sia stato inserito pochi minuti prima all'interno
del carrello? Proprio a questo tipo di problema risponde
l'oggetto Session, che si fa carico di trasportare dei dati,
unici e diversi per ogni utente, da una pagina ASP ad un'altra.
Si faccia una prova creando il documento
session1.asp come segue:
<%@ LANGUAGE = JScript %>
<% Session("stringa") = "Ciao, come stai?"; %>
<html>
<head>
<title>Prova variabili Session, pag. 1</title>
</head>
<body>
<a href="session2.asp">Pagina successiva</a>
</body>
</html>
Si
carichi il documento con il proprio browser, sfruttando il Web
Server locale, e quindi si acceda a
session2.asp, il cui codice deve essere:
<%@ LANGUAGE = JScript %>
<html>
<head>
<title>Prova variabili Session, pag. 2</title>
</head>
<body>
<%=Session("stringa")%>
</body>
</html>
Il
messaggio "Ciao, come stai?" verrà stampato nell'output inviato
al browser. Se ne deduce che la variabile
Session("stringa") è ancora viva e vegeta, e il suo
contenuto non è stato distrutto al termine dell'esecuzione della
pagina precedente. E' anche possibile evincere quale tipo di
sintassi debba essere utilizzata per sfruttare in maniera
basilare questo tipo di oggetto. E' possibile accedere, in
lettura o in scrittura, ad una particolare variabile Session
semplicente usando il riferimento:
Session("nomeVariabile")
L'oggetto built-in Session, inoltre, dispone anche della
seguente serie di proprietà, metodi e collezioni:
|
Proprietà |
|
|
|
|
CodePage |
Un intero che specifica quale codifica sia applicata al
testo (ad esempio il codice corrispondente alla codifica
ANSI è 1252). |
|
LCID |
Sta per "locale identifier", si tratta di una sigla che
indica quale identificatore locale debba essere usato per
visualizzare le pagine. Le sigle nazionali sono le stesse
adoperate negli standard internazionali. |
|
SessionID |
Proprietà di sola lettura, restituisce l'id assegnato alla
sessione dal Web Server. |
|
Timeout |
Indica, in minuti, quanto tempo di inattività debba
trascorrere prima che il Server distrugga automaticamente
l'oggetto Session. |
|
|
|
|
Metodi |
|
|
|
|
Abandon |
Distrugge l'oggetto Session su cui viene richiamato, e
libera le risorse occupate. |
|
|
|
|
Collezioni |
|
|
|
|
Contents |
Collezione di tutte le variabili Session attive per un dato
utente. |
|
StaticObjects |
Collezione di tutti gli oggetti che hanno ricevuto lo scope
"session". |
|
|
|
13.1 - Funzionamento interno di un oggetto Session
Prima di proseguire oltre è necessario comprendere quale
meccanismo si celi dietro al funzionamento di Session. Quando un
oggetto di questo tipo viene creato, il server si fa carico di
associargli automaticamente un codice identificativo
(solitamente costituito da una lunga serie di numeri e
caratteri), unico e distinto per ogni istanza ottenuta. Tale ID,
oltre ad essere conservato nella memoria del server, viene
contemporaneamente inviato anche al browser del visitatore che,
se abilitato alla ricezione dei cookie, è in grado di ricordarlo
per tutta la durata della visita al sito. Ad ogni nuova
richiesta HTTP inviata dallo stesso utente allo stesso host, il
Web Server può riconoscere il visitatore proprio attraverso tale
ID posizionato precedentemente nel suo browser. Quando in una
particolare pagina ASP viene creata una variabile Session,
quindi, questa viene conservata dal server in coppia con il
codice identificativo assegnato al visitatore. Nel corso di
richieste successive è perciò possibile riaccostare al
determinato utente le variabili Session definite
precedentemente. La proprietà
Session.SessionID permette proprio di venire a conoscenza
del codice identificativo associato ad un utente. Il lettore può
divertirsi ad utilizzarla per scoprire in che maniera sono
strutturati gli ID del proprio Web Server.
13.2 - La proprietà Session.Timeout
Le
variabili Session, benchè sopravvivano alla morte delle singole
pagine, non sono comunque eterne, ed hanno anche loro durata
temporanea. Solitamente un oggetto Session viene distrutto (e
quindi il suo contenuto perduto) dopo 20 minuti dall'ultima
richiesta HTTP effettuata dal visitatore al server. Tale misura
di tempo può essere modificata in diversi modi. Prima di tutto è
in grado di farlo l'amministratore del server attraverso il
proprio pannello di controllo. Tale modifica riguarderà tutti
gli oggetti Session creati da quel momento in poi, ma è anche
possibile variare la durata di una singola istanza dell'oggetto
direttamente tramite codice ASP, senza essere perciò
amministratori del server. La proprietà utile per far ciò è
Session.Timeout, che rappresenta in
minuti il tempo di inattività massimo consentito prima che una
variabile Session muoia. Ponendo il timeout pari a 10, ad
esempio, accadrà che l'oggetto Session associato verrà distrutto
trascorsi 10 minuti dal momento in cui l'utente interessato
dalla modifica abbia richiesto al server per l'ultima volta una
pagina appartenente al sito. Se si lavora con pagine dai
contenuti lunghi, che solitamente vengono lette in maniera
approfondita, è quindi d'uopo prolungare la durata della
sessione. Viceversa, se il proprio sito contiene pochi elementi
per pagina e se si ha la certezza che il visitatore passi
velocemente da un documento ad un altro, allora si può pensare
di diminuire il timeout in modo tale da rilasciare le risorse
del server in maniera più veloce e pratica.
13.3 - Il metodo Session.Abandon
In
molti casi può essere utile distruggere un oggetto Session
anzitempo rispetto a quanto previsto dal valore di timeout
impostato. Per questo è stato fornito il metodo
Session.Abandon, che termina
all'istante una sessione. Questa funzione trova particolare
utilità quando ad esempio bisogna compiere delle operazione di "logout".
Si pensi ad un'area ad accesso riservata, che utilizza una
variabile Session per tenere traccia del fatto che l'utente
abbia eseguito o meno l'operazione di login. Nel momento in cui
l'utente decide di abbandonare l'area attraverso l'apposita
opzione, è necessario distruggere all'istante le variabili
Session utilizzate. In tale maniera si è certi che per
riaccedere all'area sarà necessario eseguire nuovamente il login.
In questa maniera, inoltre, si mantiene anche un occhio di
riguardo per il server, che viene liberato all'istante dal peso
di informazioni che si conoscono per certo come non più utili.
Per testare il metodo si crei la pagina
session3.asp:
<%@ LANGUAGE = JScript %>
<% Session.Abandon(); %>
<html>
<head>
<title>Prova variabili Session, pag. 3</title>
</head>
<body>
<a href="session2.asp">Pagina precedente</a>
</body>
</html>
A
questo punto si visitino i documenti creati nel corso di questo
capitolo nel seguente ordine: session1.asp,
session2.asp,
session3.asp, session2.asp.
Il risultato sarà che la prima volta che
session2.asp viene visitata verrà mostrato il messaggio
"Ciao, come stai?", mentre quando si ripasserà per la seconda
volta su di essa si scorgerà la scritta "undefined". Questo
perché session3.asp, tramite il
metodo Abandon, ha chiuso la sessione e demolito ogni suo
contenuto. Per tornare a rivedere il messaggio "Ciao, come
stai?" è pertanto necessario transitare nuovamente su
session1.asp.
Attenzione: per questo esperimento non debbono essere usati i
tasti "indietro" ed "avanti" del browser, in quanto in questo
caso i documenti non vengono richiesti nuovamente al server, ma
vengono pescati dalla cache. Per provare in maniera corretta il
tutto bisogna aggiornare effettivamente ogni documento
richiesto. |