7 messaggi dal 01 gennaio 2002
Di seguido vi riporto il codice del global.asa che sto utilizzando per implementare un
portale di istant messaging.

Il campo tempo della tabella utenti mi occorre per sapere se un utente è online o meno.
(quindi lo setto a 0 nel momento in cui un'utente è uscito o non è online)



<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
function chiudisessione()
set conn=server.createobject("adodb.connection")
conn.open ("DBQ=" & Server.Mappath("/mdb-database/sanmarzano/instant_messenger.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};")
sql1="update utenti set tempo=0 where nickname='"&session("chiudinick")&"'"
conn.execute(sql1)
conn.Close()
end function

Sub Application_OnStart
Application.Lock
Application("collegati") = 0
Application.UnLock
End Sub

Sub Session_OnStart
Application.Lock
Application("collegati") = Application("collegati") + 1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("collegati") = Application("collegati") - 1
Application.UnLock
chiudisessione()
End Sub
</SCRIPT>

Il problema è questo:
Come mai quando un utente chiude la pagina del mio sito oppure cambia indirizzo
con un'altro che non appartiene al mio portale, il global.asa non esegue la
procedura di chiusura sessione?
Vedesi anche l'argomento scritto su questo forum "Fine sessione... Ma se si cambia pagina?"
11.886 messaggi dal 09 febbraio 2002
Contributi
il global.asa dà sempre gioie e dolori... anzi, solo dolori, se vuoi un consiglio trova un'altra strada.
E' molto probabile che la procedura finale non venga eseguita perchè non puoi usare Server.MapPath, non so per quale motivo ma è così... e credo abbia anche altre restrizioni.

Fortunatamente si può fare a meno del global.asa.
Il problema più spinoso è appunto quello di capire quando l'utente lascia il sito o perchè ha chiuso il browser o perchè ha digitato un nuovo indirizzo. Un modo efficiente per rilevare l'uscita dell'utente è usare il gestore evento onUnload che aprira una popup.asp in cui esegui la tua procedura di uscita, chiami il metodo Session.Abandon e fai comparire un bel saluto per giustificare questa nuova finestra che si è aperta.

Se ne è parlato molto, prova a cercare nei post passati. E' sorto anche questo problema: "Ma se l'utente fa il refresh della pagina? L'onUnload si attiva e lo disconnette, questo non va bene"
Questo lo puoi risolvere integrano la popup in questo modo:
- La finestra chiamante è ancora aperta?
si: non eseguire alcun codice > chiudi la popup
no: esegui il codice di uscita e saluta l'utente

Butta via il global.asa, è utile solo nel caso in cui hai bisogno di inizializzare delle variabili application o session...

Enjoy learning and just keep making
7 messaggi dal 01 gennaio 2002
Mi indicheresti il contrllo da fare per vedere se la pagina di provenienza è aperta???
11.886 messaggi dal 09 febbraio 2002
Contributi
l'oggetto opener identifica la finestra "generatrice della popup".
Inoltre la proprietà closed ti indica se opener è stata chiusa o no.

Quindi lo script è:

if (opener.closed){
//apri la pagina asp che terminerà la sessione
} else {
// la finestra è ancora aperta, l'utente ha solo fatto il refresh
this.close
}

se vuoi, puoi consultare anche questo post:
http://forum.aspitalia.com/forum/topic.aspx?PostID=148597

si era presentato lo stesso problema...

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.