Login univoche

venerdì 14 maggio 2004 - 10.55

FrancescoGuadagno Profilo | Senior Member

Ciao, ho un problema con la procedura di LOGIN alla mia applicazione Web.

Ogni volta che un utente effettua il login nella pagina, viene creata una variabile di Sessione che contiene il codice dell'utente che si è collegato. Inoltre, per altri motivi di sicurezza, nel mio db salvo anche in una tabella "LOGGED_IN" i codici degli utenti connessi. Alla pressione di un pulsante di Logout, chiudo l'applicazione e cancello nel db la riga relativa a quell'utente.

Il mio problema si presenta nel caso in cui l'utente non chiude l'applicazione con il pulsante di logout ma con la "X" del browser. Non è possibile in .NET (a quanto ne so) intercettare questo evento, trattandosi di un evento "client" quindi gestibile al massimo con js. Di conseguenza, se l'utente si ricollega all'applicazione con la stessa login, il controllo sul db mi restituisce che l'utente è ancora collegato, non avendo cancellato l'utente dalla tabella.

Ho proposto a questo punto come soluzione quella di cancellare all'atto della login l'eventuale codice dell'utente che si sta collegando, dal db. Questa soluzione non è stata accettata, perchè, per assurdo, deve essere possibile che un utente che effettua il login, possa trovare il suo stesso login collegato, riconoscerlo e restituire un messaggio. Di conseguenza non entra nell'applicazione.

Le soluzioni a cui avevo pensato sono quindi 3:

1) inserire nel tag body l'intercettazione dell'evento "ONUNLOAD" e far partire uno script js che legga la mia variabile di sessione contenente il mio codice utente, effettui una connessione al db del server e cancelli la riga interessata nella tabella LOGGED_IN

2) All'atto della LOGIN, controllare in qualche modo se esiste nella collection delle variabili di sessione istanziate, una variabile Session["COD_UTENTE"] uguale a quello che si sta collegando in quel momento. Ma non so come nè se è possibile farlo. Con questa soluzione eliminerei tra l'altro la scrittura sul DB dell'utente loggato.

3) Potrei usare un array come variabile di applicazione in cui registro di volta in volta gli utenti che si connettono, ma come fare a gestire l'eventuale utente che nella variabile di applicazione risulta collegato ed in realtà ha chiuso l'applicazione semplicemente chiudendo il browser e non con il logout?

Avete qualche idea? Capisco che stiamo parlando di un caso a dir poco improbabile visto che la login è univoca e strettamente personale... ma è un caso purtroppo che devo gestire

Giulz Profilo | Newbie

soluzione 4:potresti utilizzare i cookie -se te lo consentono- In fase di login l'applicazione ti scrive sul client un cookie con la tua sessione (id, etc), dopodichè ad ogni richiesta al server potrai essere autenticato (..Request.Cookies[]..)
In fase di logout devi intercettare l'unload e richiamare uno script che disabiliti il cookie..e il db lo lascerei stare..
saluti

FrancescoGuadagno Profilo | Senior Member

no...i cookie purtroppo non sono consentiti...

Giulz Profilo | Newbie

io una volta ho usato questo escamotage:
intercetti l'unload, fai partire un js del tipo window.open('logout.aspx'); opp window.navigate('logout.aspx'); da provare, quindi hai forzato un postback, a questo punto nel page_load della tua pag 'logout.aspx' potrai svuotare la Session, la tabella ect.
So che è un po' una forzatura ma funziona e poi io nn sono un programmatore
saluti
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5