Newsgroup: it.comp.www.asp
Titolo: (INFO) Quando muore una Session ?

Ciao ragazzi (e ragazze... ma credo siano pochine :-(
Dunque, nel global.asa, nel sub Session_OnEnd, vorrei far si' che prima che
vengano "azzerate" tutte le mie belle Sessioncine venissero aggiornati dei
dati relativi all'utente in un DB.
Ovviamente solo per gli utenti che si sono registrati sul mio sito e che
quindi, in Session_OnStart, riconosco leggendo dei cookies.
Per questi utenti registrati c'e' una Session("Login") = 1.
Ho scritto una routine che, nel Session_OnEnd, inizia con:
if Session("Login") = 1 Then
...
e poi il codice per aggiornare il db.
Ma non funziona !
E non e' un problema di codice xche' pari pari in un'altra pagina funziona.
Ma nel global.asa no.
Chi sa dirmi xche' ?
Grazie,
Simone

In che senso non funziona?
Hai gia' provato a forzare la chiusura della sessione inserendo un link ad
una pagina in cui e' presente il solo codice session.abbandon?
Comunque la sesion_OnEnd non risulta essere affidabilissima (non pero' che
non funzioni mai!), se quindi la questione e' critica spesso bisogna
inventarsi soluzini diverse.
Ciao, Fabio Zed Zamparelli

 una pagina in cui e' presente il solo codice session.abbandon?
No, provero'.
Ma con session.abbandon non si azzerano anche i contenuti delle session ?
Thanks
Simone Cremonini

 Ma con session.abbandon non si azzerano anche i contenuti delle session ?
Direi proprio di no, quello che si scatena e'  l'evento session_onend e
prima di essere buttate vie le variabili session (cosi' come gli oggetti
istanziati da quella sessione) vengono eseguite prima tutte le istruzioni
nel session_onend del global asa (anzi ricordo che c'era qualcosa in piu'
tipo vengono eseguite tutte le altre istruzioni asp della pagina e poi il
session_onend, ma su questo non potrei giurarci).
Io faccio cancellare una directory generata per determinati utenti e ti
assicuro che nella maggioranza dei casi funziona.
Ciao, Fabio Zed Zamparelli

Ok ma... (ultima domanda, giuro ;-)
... in definitiva nel session_onend si *devono* poter aprire connessioni
odbc, passare stringhe sql e cosi' via, giusto ?
E se non mi funziona... canno io qualcosa, giusto ? :-)
Grazie,
Simone

Nel asp 2.0 (nel precedente quando chiamavi session.abandon le vriabili
session venivano distrutte prima che partisse il codice di session_onend)
dovrebbe funzionare. Io non ho mai avuto l'opportunita' di aprire ed usare
una conessione ad un db in una sesion_onend, quello di cui sono sicuro e'
che se il la connessione al db la apri nelle pagine asp (quindi con un
determinato timet) e la sesion_onend parte dopo il session.timeout che
magari e' maggiore, la connessione potrebbe risultare caduta quando provi ad
usarla nel session_onend.
Potrebbe essere anche  per design non si possa far partire connessioni al db
nel session_onend proprio perche' alla fine dell'esecuzione del codice gli
oggetti istanziati vengono buttati, di conseguenza non ci sarebbe il tempo
di aspettare un timeout regolare per un dialogo con un db. Ma onestamente
penso che allora qualcuno che ci ha gia' sbattuto la testa ti avrebbe
risposto.
P.S. se alla fine sei tu il primo a sbatterci la testa ed hai ragione
fammelo sapere e scusa se ti ho illuso, quando ho un attimo faccio qualche
prova.
Ciao, Fabio Zed Zamparelli

Per questi utenti registrati c'e' una Session("Login") = 1.
non so cosa potrebbe essere andato storto nel tuo codice, comunque le
regole ferme sono che l'evento session_onend viene richiamato quando
termina una sessione utente, e subito dopo l'istanza dell'oggetto
Session viene distrutta. Il termine della sessione avviene sicuramente
allo scadere del timeout che hai impostato sempre tramite l'oggetto
session, tramite l'esplicito metodo Abandon e quando l'utente chiude
il browser (ma qui non abbiamo certezza, xchè con win98 questo
dovrebbe avvenire solo quando l'opzione di ie "sfoglia in un altro
processo" è attivata, ma a volte non funge) e tutte le istanze del
browser aperte sulla stessa sessione vengono chiuse.
Come visibilità (scope) delle variabili, hai a disposizione l'istanza
dell'oggetto session, quindi il tuo codice dovrebbe funzionare...
secondo me il problema che hai è che non riesci a determinare con
sicurezza quando c'è il timeout. Prova a forzarlo tramite un link al
metodo abandon oppure, meglio secondo me, imposta un timeout
provvisorio di ad esempio 15 secondi: se scaduti i secondi il metodo
SessionEnd non viene richiamato, allora sicuramente i settaggi del
timeout non sono impostati correttamente.
--------
MATRO
YahooMessenger:matrello, Icq:matro
RealPopup, the freeware winpopup replacer
http://members.tripod.com/Matro/realpopup.html

Ma con session.abbandon non si azzerano anche i contenuti delle session ?
Comunque l'evento Session_OnEnd viene chiamato prima della distruzione
dell'istanza dell'oggetto Session.


 qualche info in merito?
Per esempio a far funzionare le session: l'informazione su quale session il
browser del client sia e' a tutti gli effetti un cookie lasciato sul client.
Quanto questo particolare cookie possa essere rifiutato dai vari browser e'
altra quastione, ma come risposta alla tua domanda non mi sembrava male. Fai
attenzione a sottovalutare l'accettazione dei cookie da parte dei client,
potresti avere brutte sorprese.
Ciao, Fabio Zed Zamparelli