Utenti online con global.asa e XML

di Filippo Bonanni, in XML,
  • 0
  • 0
  • 0
  • 14,39 KB

Conoscere in tempo reale quanti utenti sono presenti sul proprio sito è un quesito che penso abbia sfiorato perlomeno una volta tutti gli sviluppatori web.

Il primo approccio è sicuramente quello di ricorrere ad una variabile Application incrementata nell'evento Session_OnStart e decrementata in quello Session_OnEnd del global.asa.

Questa soluzione però può non risultare particolarmente efficiente perché l'aggiornamento non viene effettuato in tempo reale: la sessione non decade alla chiusura della finestra ma dopo il tempo di TimeOut, che è di solito di 20 minuti.

Con un piccolo trucco è possibile però ovviare a questo problema e conoscere "quasi esattamente" il numero di utenti realmente connessi.

In aggiunta, usando un file .xml al posto di una variabile Application, è possibile mantenere più informazioni sui nostri utenti e gestirle in modo più potente.

La logica di funzionamento

L'elenco utenti viene memorizzato in un file .xml e l'aggiornamento in tempo reale viene garantito da una struttura a due frame del sito.
Nel frame superiore, nascosto, viene caricata una pagina che sull'evento onUnload richiama la pagina .asp che cancella l'utente dal file xml.
Poichè tutte le pagine vengo aperte di default nel mainFrame, l'evento della pagina nel topFrame viene scatenato solo alla chiusura della finestra o al reindirizzamento su un altro sito.

La procedura per l'inserimento nel file .xml è scritta nell'evento Session_OnStart del global.asa, quella per la cancellazione nel Session_OnEnd.

Il frame nascosto

Creiamo un FrameSet con due frame orizzontali topFrame e mainFrame, impostando l'altezza del topFrame a 0 in modo da renderlo "nascosto".

<html>
 <head>
 <title>Utenti On-Line</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 </head>
 <frameset rows="0,*" frameborder="NO" border="0" framespacing="0">
 <frame name="topFrame" scrolling="NO" noresize src="TestUscita.htm">
 <frame name="mainFrame" src="Main.asp">
 </frameset>
 </html>

Nel topFrame carichiamo il file TestUscita.htm mentre nel mainFrame l'HomePage del nostro sito.

TestUscita.htm è così strutturato:

<html>
<head>
<title>TestUscita</title>
</head>
<BODY onUnload="JavaScript:window.open('Logout.asp','Uscita','toolbar=no scroolbars=no width=100 height=100');">
</BODY>
</HTML>

Se la finestra viene chiusa o si passa ad un altro sito viene eseguita la funzione JavaScript contenuta nell'evento onUnload del tag Body e viene aperta la pagina Logout.asp in una nuova finestra delle dimensioni di 100 x 100 px.

La pagina Logout.asp ha semplicemente la funzione di forzare il temine della sessione al momento in cui si chiude la finestra o si cambia sito web con un Session.Abandon:

<%
Session.Abandon
Response.write "<script>self.close()</script>"
Response.End
%>

Poiché questa è una finestra figlia è possibile chiuderla con un self.close() senza che appaia un messaggio di conferma da parte del browser.

Tutto qua: Session.Abandon scatena l'evento Session_OnEnd contenuto nel global.asa e l'utente viene cancellato dall'elenco.

Elenco degli utenti

Vediamo ora le funzioni per la gestione del file xml.

In questo esempio prevediamo anche la possibilità di distinguere tra un utente semplice ed un utente registrato che effettua il login.

3 pagine in totale: 1 2 3

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata