ASP: la guida introduttiva - Capitolo
13 - L'oggetto built-in Session
13.0 Scopo
e utilizzo dell'oggetto Session 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. <%@ LANGUAGE = JScript %> 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 %> 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:
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 %> 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.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||