Sessione e doppio log-in

lunedì 30 luglio 2007 - 08.24

gigi90 Profilo | Senior Member

Salve a tutti , come da titolo devo implementare un meccanismo che mi permetta di riconoscere il doppio log-in da computer differenti, quindi ho pensato di utilizzari gli eventi legati alla sessione(global.asax) per memorizzare un valore nel database quando l'utente effettua l'accesso, e all'evento Session_End eliminarlo, qui però sorge un problema, se il mio utente chiude il browser, Asp.Net non riconosce più quella sessione(ne crea una nuova) e intanto nel database è rimasto memorizzato quel valore, quindi l'utente dovrà aspettare che la sessione scada(si azzera il campo del database), per ritornare a fare il log-in.
A questo punto la domanda è questa: se io memorizzo l'id della sessione in un cookie, posso recuperare la vecchia sessione che l'utente stava utilizzando?,oppure esiste qualche altro metodo?

Brainkiller Profilo | Guru

>A questo punto la domanda è questa: se io memorizzo l'id della
>sessione in un cookie, posso recuperare la vecchia sessione che
>l'utente stava utilizzando?,oppure esiste qualche altro metodo?

Ciao gigi,
è sempre complicato fare questa cosa per la natura disconnessa del protocollo HTTP. Allora, direi che la prima parte va bene. Quindi tu puoi immagazzinare lo Username che si logga ed eventualmente la SessionID. Se l'utente chiude il browser senza fare Logoff resta appesa la sessione fino al timeout.

Se l'utente si logga una seconda volta da un altro PC, puoi andare a fare una query sulla tabella di cui sopra e verificare, se c'è già un record dove il nome utente è uguale significa che non può entrare perchè c'è una sessione ancora aperta a suo nome a questo punto puoi proporgli o di attendere la scadenza della sessione o forzare, utilizzando la nuova sessione, e aggiornando il record nel database.

E' chiaro che al Session Timeout devi pulire il record che hai immagazzinato a inizio sessione.
Ti è chiaro ?
ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gigi90 Profilo | Senior Member

Si era quello che intendevo fare io, solamente che io voglio fare il controllo per un solo log-in, quindi quando l'applicazione vedrà il campo del database come se l'utente ha gia fatto il log-in resituirà un messaggio, e l'utente deve aspettare che scade la sessione(15min) al termine della quale si setta il campo del database che mi tiene traccia del login a 0 e l'utente puo rieffettuare l'accesso, ma il problema sussiste quando l'utente chiude il browser e riapre il sito: verrà avviata una nuova sessione, non riconoscendo quella vecchia.

Io vorrei sapere solo se esiste un modo per recuperare una sessione, magari tramite l'id sessione, prima che essa sia scaduta!

Brainkiller Profilo | Guru

>rieffettuare l'accesso, ma il problema sussiste quando l'utente
>chiude il browser e riapre il sito: verrà avviata una nuova sessione,
>non riconoscendo quella vecchia.

Vero, ma allora per questo è sufficiente un Cookie. Crei un numero random, tipo un intero e inserisci anche quello nella tabella e lo spari all'utente tramite Cookie. Se la persona chiude il browser e lo riapre e cerca di accedere, tu fai la query, vedi che è come se fosse già loggato, verifichi però il numero random nella tabella, fai una Request del cookie, se corrispondono significa che si sta riloggando dalla stessa macchina e allora acconsenti il login.
ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gigi90 Profilo | Senior Member

Ok Grazie molte, sei stato chiarissimo!!!
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5