Salve.

Premetto, sono alle prime armi con asp.net e sto sviluppando un'applicazione in asp.net 2.0 con db firebird 2.1.3
nel mio web.config lo stato della sessione è così gestito :
<sessionState mode="InProc" timeout="1" cookieless="false"/>
(1 min per eseguire verifiche)
L' autenticazione avviene tramite database.

Quando un utente esegue l' autenticazione eseguo le seguenti operazioni:
1.Scrivo nella tabella "utenti" quanto segue relativamente all'utente che si è autenticato (tramite campo identificatore id_utenti):
sessione_attiva = 1 e session_id = Session.SessionID
2.Scrivo nella tabella "sessioni" quanto segue:
session_id = Session.SessionID,id_utenti = id dell'utente, client_ip=ip del client,inizio_sessione=data/ora autenticazione,fine_sessione = null
3.Uso 2 variabili di sessione per memorizzare l'id_utenti e la sessionId : Session("id_utenti") = id dell'utente,Session("session_id")=Session.SessionI D

la tabella utenti mi serve per tener traccia di chi è autenticato ed impedire doppi login
la tabella sessioni mi serve per motivi interni (log management)

Alla pressione del Logout avviene quanto segue:

1. tabella "utenti" : sessione_attiva = 0 e session_id = null
2. tabella "sessioni" : fine_sessione = data/ora logout
3. Session.Remove("id_utenti") e Session.Remove("session_id")
4. Session.Abandon (è corretto??)

La scadenza della session (nel caso in cui non si prema il pulsante di logout) la gestisco tramite session_end nel global.asax facendo eseguire le operazioni 1 e 2 del logout viste sopra
(lo so, ne consegue che le stesse operazioni vengono eseguite due volte (session.abandon "scatena" Session_End)..non ho trovato altro modo..)

Finalmente la domanda più inflazionata del Web..
Come gestire la chiusura del browser da parte dell'utente ??
So che la session non scade alla chiusura del browser ma alla fine del timeout.
Vorrei poter aggiornare le mie due tabelle "utenti" e "sessioni" come visto sopra cioè:
riportare il flag di sessione_attiva a 0 e "chiudere" l'arco temporale di sessione assegnando data/ora al mio campo fine_sessione.
Ho letto di soluzioni lato server e client (Response.IsClientConnected,body onunload, ecc.) ma non mi hanno convinto.
Ho disperatamente cercato soluzioni tipo session spooler o qualcosa del genere..
Sono inesperto e in quanto tale avevo pensato si potesse in qualche modo "ciclare" ogni tot di tempo lato server su tutte le variabili
session("id_utenti") esistenti ed attive e confrontarne il valore con gli id_utenti nella tabella utenti in database.
Per tutti gli utenti in tabella per cui non è in "vita" una variabile di sessione corrispondente, riportare il flag sessione_attiva a 0 in caso
fosse a 1.
Non penso però si possa fare o meglio non ho trovato nulla sul web da cui la deduzione..

Spero di essermi spiegato correttamente.
Spero che inesattezze e lacune siano perdonate visto che ho iniziato da una ventina di giorni..
Avete suggerimenti ?

Grazie in anticipo!

Gabriele