PDA

View Full Version : Codice da richiamare automaticamente quando si cambia pagina


dansolo
17-04-2004, 00:06
Salve a tutti,

sto cercando di realizzare un sistemino in ASP per vedere se un utente si connette a un'area riservata da due posti diversi con lo stesso user e password. Ho realizzato un db con i seguenti campi:

Username
Password
Lock

Quando l'utente si connete metto il lock a 1 (originariamente è a 0) in maniera tale che la stessa coppia user+password non possa più essere sfruttata. Il problema sta quando l'utente si disconnette. Se infatti utilizza la pagina di log-out non ci sono problemi perchè da qui rimetto il lock a 0. Se invece chiude il browser o cambia indirizzo senza passare dalla pagina di log-out il lock rimane a 1 e il sistema non serve più a niente perchè la coppia user+password rimane bloccata per sempre. Mi servirebbe un pezzo di codice da eseguire automaticamente quando si chiude il browser o quando si cambia pagina... Esiste qualcosa del genere o sto delirando? E, se non esiste, qualcuno sa come si risolve un problema di questo tipo (anche reingegnerizzando il db se serve)?

Grazie in anticipo

ri
17-04-2004, 00:16
onUnload forse esiste, ma se dovesse esistere non ci fare affidamento

il problema dei login protetti si risolve mantenendo l'informazione di loggato/sloggato non su db ma nella sessione, che ha una durata massima impostabile (mi sembra che il default sia 20 minuti)

cmq su questo argomento ci sono dozzine di articoli sul web, alcuni anche molto validi, ma non ho link sotto mano

cionci
17-04-2004, 00:22
Nel tag body c'è l'evento onunload...ma non funziona molto bene...
Unica alternativa è aspetta che la sessione muoia automaticamente dopo il timeout (messo a 20 minuti)...ma comunque crea problemi (per 20 minuti uno non si può riconnettere)...
Puoi fare in modo di invalidare l'auteticazione di un utente già connesso nel caso che un altro utente entri con lo stesso account...
Puoi comunicarlo al primo utente visualzzando un messaggio del tipo "Un altro utente si è connesso con questo account, nel caso la situazione non sia stata prevista inviare una richiesta di cambio password" o qualcosa del genere ;)

Per fare una cosa del genere basta tenersi una tabella contenente:

UserID SessionID Stato

Il SessionID si recupera da Session.SessionID (mi sembra)...
Per ogni pagina basta verificare che per qullo UserID e per quel SessionID lo stato sia valido...

Nel caso un altro utente si logghi con un certo UserID mette come stato non valido tutti gli utenti con lo stesso UserID nella tabella...

Nel caso che uno stato non sia valido si distrugge la sessione, si invia un messaggiod el tipo sopra e si canclella dalla tabella la riga relativa a quella sessione...

dansolo
17-04-2004, 11:33
Vediamo se ho capito bene: in ogni pagina dovrei fare una query al database per avere le informazioni sullo stato della sessione per un utente? E, in caso affermativo, le prestazioni non ne risentono?

Grazie per l'aiuto

ri
17-04-2004, 11:38
se usi correttamente le variabili di sessione e quelle di applicazione fai tutto senza interpellare il db

cionci
17-04-2004, 11:40
Originariamente inviato da ri
se usi correttamente le variabili di sessione e quelle di applicazione fai tutto senza interpellare il db
In effetti se si usa un vettore nella varibile di applicazione si può evitare di usare il db...

dansolo
18-04-2004, 11:18
Scusate se vi stresso ancora, ma sono proprio agli inizi. Confermatemi questo: le variabili di sessione devono essere lato server, cioè dovrei agire sul file global.asa?

cionci
18-04-2004, 11:21
No...nel global.asa non è detto che tu debba agire...
Le variabili di sessione sono già automaticamente lato server ;)