2009-12-27 23 views
6

come si controlla se un utente ha già effettuato l'accesso?controllare se un utente ha già effettuato l'accesso?

in modo che se un utente in un altro browser sopraelevazione accedere con lo stesso account.

inoltre, è una buona soluzione o dovrei consentire all'utente di accedere nell'altro browser e quindi disconnettere l'utente corrente e visualizzare un messaggio (sei connesso da un'altra posizione) proprio come fa il messenger?

risposta

1

Alla prima metà della domanda è stata data una risposta soddisfacente per sapere come rilevare più utenti, ma come trattarli credo che abbia ancora bisogno di un po 'di lavoro.

Prima di tutto, se un utente esegue correttamente il login, non prevenirli se sono connessi in qualche altro posto. Se davvero non si desidera che l'utente abbia due sessioni aperte, disconnettere il vecchio o semplicemente aggiornare l'id di sessione che si sta salvando in modo da poter rimbalzare la vecchia connessione. Puoi informarti se vuoi, ma invierò solo un messaggio alla sessione che hai invalidato. Se si invia un messaggio, l'accesso dell'utente diventa fastidioso quando si tratta solo del caso in cui un utente cambia computer e si è dimenticato di disconnettersi dalla vecchia sessione.

3

generare un token casuale al momento dell'iscrizione (o usare il sessionid), e memorizzare questo nel database e nel cookie degli utenti. Ad ogni accesso alla pagina, assicurarsi che il token dell'utente corrisponda alla voce del database. Se i due non corrispondono, avvisare l'utente che hanno effettuato l'accesso altrove.

Si potrebbe anche memorizzare l'ora di accesso, che in seguito sarebbe il momento il token è stato assegnato, e richiedono 30 minuti prima di consentire un altro utente di accedere con lo stesso ID.

+0

La memorizzazione dell'ID di sessione nel database è ancora migliore. – TravisO

+0

Anche questo funzionerebbe, TravisO :) – Sampson

2

Utilizzando sessions è un buon modo per fare questo, ed è un metodo molto comune per il controllo di autenticazione.

Il flusso di solito simile a questa:

  • User visite in loco, e session_start() si chiama. Un identificatore di sessione univoco è impostato per quel visitatore (ad esempio un cookie).
  • utente invia le sue credenziali di accesso ad un modulo di accesso
  • Credenziali di accesso sono verificate, e questo fatto viene memorizzato nei dati di sessione con $_SESSION['logged_in'] = true, o qualcosa di simile
  • Per il resto del tempo dell'utente sul sito, può controllare $_SESSION['logged_in'] per vedere se l'utente si è connesso.

al fine di controllare gli accessi di un utente, si potrebbe semplicemente avere un campo in un database (users tavolo va bene) che indica quanto la corrente ID di sessione viene (recuperata con session_id()) per l'utente e se non corrisponde al valore del cookie si t ricevuto, quindi si chiama immediatamente session_destroy() per quell'id e si considera l'utente come disconnesso.

L'utilizzo di $_SESSION significa che non devi preoccuparti di generare i tuoi token e di avere la potenza dei superglobali incorporati per facilitare la memorizzazione delle informazioni sullo stato di autenticazione dell'utente.

Personalmente, consentirò a più sessioni di essere attive per un utente per la maggior parte dei siti web, poiché di solito non c'è una buona ragione per non farlo, ma ovviamente dipende dalla natura del sito. Tuttavia, memorizzare l'id della sessione attiva corrente come menzionato sopra è un modo abbastanza semplice per ottenere questo risultato.

+0

Ricorda anche di generare una nuova sessione dopo l'accesso, se si genera una sessione solo sulla prima pagina di visualizzazione nel modulo di accesso e non si rigenera, ci sono modi per sfruttare quell'utente . – TravisO

0

Bene Tutte le soluzioni sopra menzionate funzioneranno ma se su ogni pagina si accede a una chiamata al database e si verifica il token di sessione per vedere il tempo stesso lo stesso token assegnato all'utente .. ucciderà il tempo di risposta. quello che suggerirò è utilizzare un meccanismo di memorizzazione nella cache invece del database nelle suddette soluzioni. l'archiviazione del token di sessione nel database aggiungerà un campo aggiuntivo al database che in realtà non è richiesto. Utilizzare la soluzione di caching open source come memcache.

0

si può fare una tabella come userLoginStatus con campi come il tempo di clockin & tempo ClockOut, e inserire l'ora corrente a clockin quando l'utente è fare login, lasciare ClockOut tempo vuoto in quel momento, si dovrebbe essere aggiornato solo quando l'utente fare orologio over logout button, in modo da poter controllare lo stato corrente dell'utente specifico, dove clockOut è vuoto a cui l'utente deve accedere. perché è aggiornato solo quando l'utente effettua il logout.

Problemi correlati