Newsgroup: it.comp.www.asp
Titolo: Intercettazione chiusura browser

Qualcuno conosce come intercettare la chiusura del browser
visto che Application_onEnd e  Session_onEnd del file Global.asa non
vengono richiamate se chiudo la sessione chiudendo il browser (cliccando
sulla
crocetta di chiusura dell'applicazione).
Grazie,
Alessandro

...

Questo non e' del tutto vero.
Quando il browser viene chiuso, Application_onEnd NON viene chiamato, in
quanto l'applicazione non termina, ma resta attiva per rispondere ad altri
utenti.
La sessione, al contrario, termina (e quindi viene chiamato Session_OnEnd),
anche se con un certo ritardo, in quanto e' un timeout a farla terminare (20
minuti dallo scaricamento dell'ultimapagina, se non sono stati toccati i
valori di default).
Purtroppo il server non e' in grado di "vedere" la chiusura del browser e
quindi NON PUO' gestire "in tempo reale" la vera fine della sessione.
(Piacerebbe tanto anche a me poter loggare l'ora esatta di logout di un
utente, ma ahime non ci sono mai riuscito e temo che non ci riusciro' mai)
Ciao
Stefano

 utente, ma ahime non ci sono mai riuscito e temo che non ci riusciro' mai)
... mi sa che hai ragione. Non si puo' proprio. L'HTTP e' un protocollo
che a fine trasferimento dati chiude la connessione. Quindi....
C'e' pero' da dire che IIS4 ha un'opzione che si chiama "HTTP Keep
Alive" o qualcosa del genere. Prima o poi indaghero'. Bisognerebbe
vedere se fa quello che penso, se si puo' "intercettare", se... se...
Se scopri qualcosa facci/fammi sapere.  :-)
  saluti
------------------------------------------------------
 Fabrizio Accatino
 Web:   
http://www.cclinf.polito.it/~fhtino
 EMail: 
fht...@cclinf.polito.it
 
fht...@geocities.com
------------------------------------------------------

vedere se fa quello che penso, se si puo' "intercettare", se... se...
Un po' troppi se, mi sembra :-)
Comunque mi hai messo una pulce nell'orecchio e sono andato a fare qualche
ricerca sui cd di MSDN. Quello che e' saltato fuori e' veramente poco.
Comunque mi sembra (e sottolineo sembra) di aver capito che:
- L'opzione in questione abilita il server a tener aperta la connessione, ma
e' il client a decidere quando tenerla aperta e quando chiuderla.
- L'uso attuale che IE fa di questa possibilita' e' quello di riciclare una
stessa connessione per scaricare piu' elementi della stessa pagina, ad
esempio piu' immagini, evitando di dover chiudere e riaprire una connessione
ogni volta. Tuttavia, quando sulla barra di stato compare "Done", sembra che
le connesisoni siano state chiuse.
- Per sfruttare il parallelismo, esistono comunque piu' connesisoni attive
contemporaneamente per ogni client. Quindi la chiusura di una connessione
non significa necessariamente la chiusura del browser.
- Pare che non esista in ASP nessun evento in grado di segnalare la chiusura
di una connessione (e forse e' giusto che non ci sia, dal momento che le
connessioni sono un dettaglio implementativo di basso livello).
Ahime', niente di buono, a quanto pare; ma non importa: l'importante e'
averci provato!
Ciao
Stefano

>>> Purtroppo il server non e' in grado di "vedere" la chiusura del browser
E abbinare ASP a Java?
Intendo dire che con Java potrei riconoscere sul client che sto chiudendo il
browser, o comunque passando a pagine diverse, ed in quel caso lanciare una
pagina sul server in formato asp che potrebbe gestire la chiusura della
sessione.
Che ne pensate?
Giorgio Leonardi

 vedere se fa quello che penso, se si puo' "intercettare", se... se...
no. Questa e' solo una nuova feature di HTTP 1.1 
(tra l'altro Apache la disabilita se il client e' la beta 2 di MSIE 4
perche buggata). Anziche' aprire una nuova connessione per ogni
elemento,
si riutilizza quelle gia' aperte riducendo cosi' di molto l'overhead.
 
Riguardo al problema originario, posso pensare ad un hack con javascript
e la funzione onUnload, anche se devi stare attento perche' invocare
una connessione http su onUnload assai spesso crascia il browser.
 Ricordo inoltre una vecchia tecnica di netscape 1.1 che si chiama
server push. Non so se e' ancora supportata...
luca

Interessante! Visto che sono un ignorantone di Javascript, non e' che
butteresti giu' un paio di righe?
Penso che nonostante lo sconfinamento OT, molti di noi sarebbero contenti di
obbligare almeno all'uscita da una certa pagina la redirezione verso il
comando session.abbandon da posizionare in un relativo blocco asp.
Ciao, Fabio Zed Zamparelli

Ho provato a settare il numero massimo di connessioni per IIS es 2;
ho provato a connettermi  due volte e alla seconda mi negava
giustamente l'accesso, ho chiuso i browser (e quindi le connessioni)
e a quel punto mi sono riconnesso e sono entrato. quindi IIS si e'
accorto in "tempo reale" che le due connessioni di prima sono "cadute".
Esiste un modo per interfacciarsi a IIS?
Ciao,
Alessandro

...

Una soluzione puo' essere quella di usare i frame:
il frame principale (ad esempio quello dei menu) e' quello che viene usato
per intercettare la fine della sessione (cioe' quando il browser non lo vede
piu' consideriamo finita la sessione)
All'interno del frame basta mettere:
nella parte head
<script language="JavaScript">
<!-- nascosto per script
var exit=true;
function FineSessione()
{
    if (exit==true)
window.open("
http://www.miodominio.com/endsession.asp
","checkout","scrollbar
s=0,status=0,menubar=0,resizable=0,location=0,toolbar=0,width=270,height=300
");
}
//fine nascosto -->
</script>
(ovviamente invece di aprire un'altra finestra si possono fare altre cose,
ma potreste usarla ad esempio per salutare e ricordare di tornare sul vostro
sito)
e poi
<body onUnload="FineSessione();">
Nella pagina asp richiamata potete fare quello che volete (ad esempio
azzerare le variabili di sessione perche' se non ha chiuso il browser ma ha
solo cambiato pagina se tornasse da voi bisogna che vi rendiate conto di
aver chiuso la sessione.
Come detto questo va bene con i frame: vediamo se qualcuno ha qualche idea
nel caso non si vogliano usare i frame.
Giorgio Leonardi

La questione si sposta cosi' ad un livello piu' basso, verso le socket
attraverso cui si gestisce l'http. Se M$ non ci ha voluto dare grossi
strumenti al riguardo con cui smanettare ad alto livello, a parte il
session.abandon, ci sara' pure stato un motivo ;-)
Dalla tua constatazione riesco solo a dedurre, come d'altronde penso volessi
intendere tu, che il 2 che hai imposto corrisponde non alle sessioni ''ASP''
contemporaneamente aperte, ma alle sessioni di comunicazione HTTP, magari
qui entra proprio in ballo quel HTTP Keep
Alive a cui qualcuno si riferiva in precedenza o magari sto solo sparando
c****.
Ciao, Fabio Zed Zamparelli

Complimenti per l'ottima idea. L'ho usata nel mio frameset e funziona alla
grande.
Un solo ritocco:
Se non esiste gia', non e' necessario creare un frame che resti visibile per
tutta la durata della sessione. Infatti e' possibile intercettare l'evento
onunload anche dell'oggetto frameset:
<frameset ROWS="80,*" language=javascript onunload='CheckEndSession();'>
...
Ciao
Stefano


^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
Moderatore di it.comp.www.asp
Gruppo di supporto: 
http://www.asp-it.com
^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
iPoint Network 
http://www.ipoint2000.net
 Servizi, siti ed altro!
Personalizza le tue notizie con 
http://www.ipoint2000.net/now

Commenti a tal proposito?
Buona anche questa, come idea, ma purtroppo non adatta al mio caso.
La mia necessita' e' quella di avere un file di log da cui si possa capire
quanto tempo sta ciascun utente a leggere ciascuna pagina. (E' un corso on
line e questo serve per capire se ci sono pagine che vanno spiegate meglio o
cosa).
Comunque con js funziona bene.
Grazie lo stesso
Ciao
Stefano

Non ho seguito bene la questione, spero di parlare fuori luogo, ma esiste un
bellissimo componente gratuito che di solito viene usato per testare il
tempo necessario per l'esecuzione per esempio di una pagina asp. Il
componente e' un cronometro: start stop reset. Tipica applicazione e' start
all'inizio della pagina asp, stop alla fine dell'elaborazione per esempio
della query e stampa in fase di debug del tempo impiegato tra start e stop
oppure in fase post debug warning via mail all'amministratore quando un
tempo e' un poco troppo vicino al timeout dell'elaborazione asp della
pagina. Le performance a prima vista sono buone e lo uso anche per eseguire
dei wait tot seconds. Potresti mettere lo stop nella pagina successiva e
scrivere nel log la pagina da dove veniva e il valore allo stop del
cronometro.
L'oggetto si chiama: asptime  
www.cs.niu.edu/~z951259/comlinks.html
Es: di utilizzo
<%
' Create an instance of Time Class
Set X = Server.CreateObject("ASPTime.Time")
' Start the stop-clock
X.Start()
'Your code goes here
.........
' Pause for 1.25 second
X.Pause(1.25)
' Stop the stop-clock
X.Stop()
' Print the TimeGap
Response.Write ("The code clocked " & X.TimeGap & " MilliSeconds")
%>
P.S. Per chiunque legga questo post vi prego: Leggete anche il post ''SOLO
IE5 rifiuta response.expires??!!??''
La questione e' decisamente grave ed urgente.
Ciao, Fabio Zed Zamparelli

 [...]
La questione effettivamente era diversa: non si tratta di sapere qunto tempo
ci mette il server ad elaborare la pagine, ma quanto ci mette l'utente a
leggerla e capirla, cioe' quanto tempo la pagina resta visualizzata sul
client.
Comunque, al di la' della questione attuale, l'oggetto che citi mi sembra
molto utile per il profiling delle applicazioni ASP. Mi riprometto di
provarlo quanto prima.
Ciao
Stefano

 client.
Si, ma con la tecnica che ti avevo proposto puoi anche dedurre quanto tempo
l'utente rimane su di una pagina.  Anzi mi sembra che un utilizzo classico
per cui veniva utilizzato era proprio quello di valutare da quando un utente
riceveva una pagina con una form da compilare a quando schiacciava il
bottone submit quanto era passato, per semplificare ove necessario le form.
Evidentemente l'oggetto viveva nella sessione e non moriva nella pagina,
quindi se il percorso da una pagina all'altra e' abbastanza guidato dovrebbe
essere possibile anche nel tuo caso monitorare il tempo di presenza su una
pagina.
Ciao, Fabio Zed Zamparelli

pagina.
Esatto.
Resta pero' il problema dell'ultima pagina che l'utente visualizza prima di
chiudere il browser o prima di passare ad un altro sito.
Ciao
Stefano

 wrote in message
7job7b$prv$1...@waltz.mi.linux.it...


, 
pas...@eunet.no
 says...
[MEGA SNIP]
Non hai mai usato SiteServer???
Se hai un server IIS e fai regolarmente i log con il suo algoritmo di 
intereferenzazione riesce a darti le pagine più visitate e per quanto 
tempo.
Se vuoi te ne mando un esempio.
Ciao.
-- 
================================================================
The BitStreamer			
thebits...@hotmail.com
----------------------------------------------------------------
Being digital, being better
================================================================