6 messaggi dal 22 maggio 2001
Ciao a tutti,

ho iis6 con win2k3,

ho inserito nel global.asa l'evento

Sub Session_OnEnd()
<codice>
End Sub

Se effetto un Session.Abandon la Session_OnEnd() viene eseguita.

Invece se chiudo il browser non viene eseguita!!Perchè?

Ho messo anche un
Sub Session_OnStart()
Session.Timeout = 5
End Sub

ma niente!!!

un consiglio?
Grazie

Filippo Biabo
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Sei sicuro che l'impostazione del timeout di sessione non venga modificata da qualche altra tua pagina?

Il codice che hai scritto sembra corretto. Perdona la banalità della mia osservazione ma ti ricordo che il tempo indicato in Session.Timeout è espresso in minuti.

Potrebbero incidere sul timeout della sessione: la versione di IIS (incide sui valori minimi/massimi di .Timeout), il timeout della connessione nelle proprietà dell'applicazione web in IIS.

Session.Abandon provoca la chiusura immediata della sessione quindi la chiamata a Session_OnEnd non è sottoposta al processo di timeout.

Ciao.

.:. Marcello Rutter .:.
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Rileggendomi un po' di documentazione su MSDN ho trovato anche questo appunto che non ricordavo:

In the event that there isn't an Anonymous user, or the Logon for the Anonymous user fails, the OnEnd function will not be called, and an event will be logged.

Ciao.

.:. Marcello Rutter .:.
6 messaggi dal 22 maggio 2001
Grazie intanto x la risposta.

Si il session.timeout è in minuti, e ho controllato il timeout di iis chè di 120 sec.

ma non riesco ad uscirne...
comunque quando faccio il session.abandon la Session_OnEnd viene eseguita.
ho provato anche con il javascript inserendo nel tag body onUnload l'apertura della pagina logout.asp che mi lancia il session.abandon
ma non me la apre...

Altri aiuti?

Ciao

Filippo Biabo
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Incuriosito dal tuo messaggio ieri sera mi sono letto i post di un bel po' di forum osservando che in molti hanno lo stesso tuo problema. Le maggiori risposte tendono a considerare l'evento Session_OnSend non deterministico intendendo con questo che non è assolutamente garantito che l'evento venga richiamato nei casi di timeout della sessione (a differenza invece di quanto accade nel caso di Session.Abandon).

Se l'utilizzo di "OnEnd" è vitale per la tua applicazione forse è il caso di pensare a qualcosa di più robusto. Potresti, ad esempio, memorizzare le informazioni di OnStart (SessionId, ecc.) in un database; rinfrescarle ad ogni nuova richiesta e infine monitorarle (quindi distruggerle o eseguire le operazioni previste dal caso) con un processo a parte (può anche essere una stored procedure di SQL Server) eseguito ad intervalli regolare (se sei pratico di .NET/Java questo processo dovrebbe funzionare come una sorta di garbage collector). E' quasi più semplice da realizzare che non da descrivere.

Buon lavoro.

.:. Marcello Rutter .:.
6 messaggi dal 22 maggio 2001
Ti ringrazio per la tua grande disponibilità.

Mentre ho deciso di cambiare "strategia" (salvando i dati nel db)
mi è arrivato l'avviso della tua risposta nel forum vedendo che anche tu hai optato proprio questa soluzione.

Ciao e ancora grazie

Filippo Biabo

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.