Newsgroup: it.comp.www.php
Titolo: gestione login

Salve a tutti,
vorrei sapere se qualcuno ha già affrontato il seguente problema: devo
gestire l'accesso ad un'area riservata in modo tale da impedire che due
account siano attivi contemporaneamente.
Apparentemente il problema non sembra difficile: aggiungo un campo "loggato"
nella tabella utenti (che mi serve anche per l'utenticazione) e quando
faccio il login (username+password corrette) setto ad 1 quel campo, mentre
al momento del logout riporto a 0 quel campo. Durante la login ovviamente
verifico che il campo loggato sia a 0 perchè in caso contrario impedisco
l'accesso (l'utente è già loggato).
Scusate la premessa ma era indispensabile per capire a fondo il vero
problema: per la natura dell'area riservata ovviamente gestisco le sessioni
con un cookie, adesso con la nuova feature che mi è stata richiesta si
verifica il seguente problema: se l'utente lascia scadere il cookie oppure
se chiude il browser nessuno resetta il campo loggato a 0 e così
quell'utente non potrà più rientrare!
Se qualcuno si è già trovato con un problema simile sarei veramente grato se
mi potesse dare una dritta...
Grazie in anticipo.
Saluti.
Enea

 due account siano attivi contemporaneamente.
Di questo argomento se ne e' parlato anche in precedenza riguardo il
conteggio degli utenti online.
Al momento conosco due soluzioni:
1^ Tecnica di pooling
2^ Riscrittura handler delle sessioni.
La tecnica di pooling prevede di inserire oltre al campo "loggato"
anche un campo del tipo TIMESTAMP nella tebella degli utenti. Questo
campo verra aggiornato ogni vlota che l'utente esegue delle determinate
azioni (es accede ad una certa funzione, visualizza una pagina etc.).
All'atto del login se viene trovato che l'utente e' gia' "loggato"
viene verificato questo campo TIMESTAMP, nel caso in cui il valore
contenuto indica un istante piu' vecchio di, ad esempio 20 minuti
(tempo standard di scadenza di una sessione) allora si presuppone che
l'utente se ne sia andato. Il tempo di "timeout" e' indicativo e puo'
essere definito in base al tipo di azioni che ne fanno aggiornare il
valore.
La riscrittura dell'handler e' una tecnica avanzata non sempre
attuabile (dipende dalla configurazione del PHP).
http://www.php.net/manual/en/function.session-set-save-handler.php
In questo caso e' possibile fare in modo che venga sempre settato a 0
il campo "loggato" quando la sessione decade.
-- 
I am what I am, I do what I can
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.


Non puoi mai sapere se un utente si è scollegato o no.
quindi devi affidarti al tempo:
Se un utente non fa più richieste di pagine entro X tempo, allora scade.
supponendo che stai usando un DB tipo MySql
Io lo gestirei in una tabella differente.
del tipo:
id_utente (univico)
data_ultima_richiesta.
con il campo id_utente
In ogni tua pagina dovresti eseguire un codice che:
- cancella dalla tabella tutte le sessioni scadute.
- Aggiorna la data del  record dell'utente che ha richiesto la pagina.
Se il tempo è scaduto, il suo record non c'e' più.
Al login invece
- cancella dalla tabella tutte le sessioni scadute.
- Tenti di inserire il record dell'utente che si logga.
      Se ci riesci, l'utente non c'era e procedi.
      Se non ci riesci, c'e' già un utente che è loggato.
-- 
Cordialmente.
Melus.
Dal mio e-mail togli i simboli di zorro.