asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 243
ASPCode.it - Store
<< lezione precedente lezione successiva >>

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.

<< lezione precedente lezione successiva >>


Utenti connessi: 243