Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Session e chiusura browser
venerdì 20 novembre 2009 - 17.50
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
rubensoda72
Profilo
| Newbie
2
messaggi | Data Invio:
ven 20 nov 2009 - 17:50
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.SessionID
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 aso 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
FrancescoGuadagno
Profilo
| Senior Member
224
messaggi | Data Invio:
ven 20 nov 2009 - 18:11
Ciao, quando ho avuto io un problema analogo risolsi con l'onunload, facendo un Redirect a un'altra pagina che quindi lato server si occupava di queste questioni.
Se non ti piace questa soluzione allora credo che tu sia proprio nei guai
TOPOAMORE
Profilo
| Expert
695
messaggi | Data Invio:
dom 22 nov 2009 - 00:46
Ciao,
come ha anche detto AmadeusBA puoi gestire il tutto tramite unload della pagina che si scatena alla chiusare del browser per ovvi motivi
e gestire l'update dei dati tramite redirect a una nuova pagine tramite ajax
facci sapere
ASP 2.0 - VB 2008
sankyu
Profilo
| Senior Member
266
messaggi | Data Invio:
mer 25 nov 2009 - 23:58
una soluzione forse ce l'ho un po complessa ma dovrebbe andare
usa il global.asax ed imposta una variabile di tipo static C# o shared vb.net in cui listi tutte le sessioni che sono oggetti ed hanno uno stato potresti creare una classe tipo
sessioneUtente che contiene il sessionID e un booleano che indica se attiva o no
poi ogni volta che un'utente fa una richiesta nella pagina web tu controlli che tutte le sessioni siano attive e ne aggiorni lo stato
domani magari mi spiego meglio ora ho sonno!
FrancescoGuadagno
Profilo
| Senior Member
224
messaggi | Data Invio:
gio 26 nov 2009 - 09:31
>una soluzione forse ce l'ho un po complessa ma dovrebbe andare
>usa il global.asax ed imposta una variabile di tipo static C#
>o shared vb.net in cui listi tutte le sessioni che sono oggetti
>ed hanno uno stato potresti creare una classe tipo
>sessioneUtente che contiene il sessionID e un booleano che indica
>se attiva o no
>
>poi ogni volta che un'utente fa una richiesta nella pagina web
>tu controlli che tutte le sessioni siano attive e ne aggiorni
>lo stato
>
>domani magari mi spiego meglio ora ho sonno!
Così però non riesci comunque a gestire il session end di un utente che scatta, nel global.asax, per assurdo 20 minuti dopo che l'utente ha già chiuso il suo browser...
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !