2010-09-04 15 views
7

Come posso fare in modo che solo 1 può essere in linea per l'utente 1 in quel momento? Idea?PHP/SESSIONE: accedi uno per utente?

Così non si può per esempio accedere a Utente1 su un PC/browser e poi dall'altro login pc/browser per Utente1?

ho il mio communitysystem in PHP, oltre a memorizzare in sessioni ..

risposta

6

È possibile memorizzare l'ID di sessione (e l'ultimo tempo di accesso) in un database e rifiutare i tentativi di accesso per gli utenti con ID di sessione diversi se il tempo dell'ultimo accesso è troppo recente (ad esempio negli ultimi 20 minuti). Cancellare l'ID al logout, ovviamente.

Nota, tuttavia, se un utente chiude il browser senza disconnettersi e quindi lo riapre, potrebbe essere bloccato per un po '(i 20 minuti precedenti o qualsiasi intervallo si decida), poiché non lo faranno avere il cookie della sessione corrispondente più.

3

Non c'è bisogno di usare le sessioni. Basta creare una colonna nella tabella users del database se un utente ha effettuato l'accesso o meno. Controlla da lì.

La colonna può essere denominata LoggedIn e può essere un enum ('Yes','No'). Inoltre, conservare il momento del login in qualche colonna LastLoggedIn Così, quando un utente vuole accedere, prima verifica:

select 1 from users where ID = {$UserID} and `LoggedIn` = 'No' 

Se una riga viene restituita, lo lasciò/il suo accesso.

Se qualcuno si dimentica di disconnettersi:

Eseguire un job di cron o script che ripristinare lo stato LoggedIn dopo un determinato periodo di tempo di utenti che hanno effettuato l'accesso per più di qualche ora controllando LastLoggedIn tempo.

+0

Vuole assicurarsi che un utente abbia effettuato l'accesso da non più di un PC, vale a dire di invalidare altre sessioni quando l'utente ha una nuova sessione. @ Karem, correggimi se ti ho sbagliato. – aularon

+1

Se qualcuno si dimentica di disconnettersi, potrebbe essere bloccato in modo permanente. E a meno che non si tenga traccia dell'ora dell'ultimo accesso, un processo cron disconnetterebbe gli utenti che erano ancora attivi. – cHao

+0

cHao proprio quello che pensavo .. e io non voglio che .. – Karem

6

Suppongo che tu salvi gli utenti in un database, aggiungi un campo active_session, aggiornalo al momento dell'accesso e verificalo sulle richieste per assicurarti che l'ID di sessione utente corrente corrisponda a quello memorizzato nel database.

su login:

UPDATE `users` SET `active_session`='$session_id'; 

Quando l'utente va ad una pagina che richiede login, si cerca quel valore:

SELECT * FROM users WHERE `active_session`='$session_id'; 

questo modo, se l'utente si in altro luogo, la sessione precedente la chiave viene sovrascritta e SELECT sopra restituisce un set di risultati vuoto.

0

Il modo migliore per farlo è quello di creare una colonna aggiuntiva nella tabella utenti che è impostato a 0 (false) di default e quando si accede in set a 1 (vero). Poi, quando l'utente si disconnette resettato a 0. eseguire un controllo ogni due ore che richiede ad un utente di fare clic su Sì per continuare con la sessione o essere auto disconnesso dopo un conto alla rovescia raggiunge lo zero. Il pavimento è che più a lungo si lasciarlo fino a quando si esegue il controllo il più a lungo che un utente avrebbe dovuto aspettare di essere in grado di accedere di nuovo se hanno lasciato il sito ed è venuto subito indietro senza disconnettersi correttamente come la tabella utente sarebbe ancora vero fino alla disconnessione. L'effetto collaterale richiede più spesso l'input dell'utente contro la perdita di accesso per un periodo di tempo più lungo. Deve essere valutato in modo che non sia fastidioso per l'utente. È possibile rilevare che l'utente ha lasciato il proprio sito utilizzando js e quindi disconnettersi ma l'utente può disattivarlo e pertanto non è affidabile.

0

Ho lo stesso compito in cui desidero che l'utente abbia solo una sessione. Questo quindi può essere solo lui/lei che usa l'account, e non un sacco di altre persone.

Il modo in cui l'ho progettato è che ho una tabella in cui sto memorizzando l'inizio e la fine della sessione. Questo deve essere usato per l'utente per vedere quanto tempo ha avuto l'ultima visita e quando era online l'ultima volta.

Quindi ho progettato una tabella di sessione in cui sto aggiornando l'ora/la data ogni volta che l'utente fa qualcosa. Se il tempo qui è precedente a 30-60 minuti (non ha ancora deciso lo span), il valore della sessione verrà rimosso. Questo quindi l'utente può accedere di nuovo più tardi se decide di farlo. Ma non all'interno della serratura da 30-60 volte.

La tabella di sessione verrà tracciata da un cron job.

0

La mia idea sarebbe quella di continuare da qui la prima risposta che ho visto:

è possibile memorizzare l'ID di sessione (e tempo di accesso ultima) in un database, e di respingere i tentativi di accesso per gli utenti con diversi ID di sessione, se il l'ultimo accesso è troppo recente (per esempio negli ultimi 20 minuti). Cancellare l'ID al logout, ovviamente.

Creare una colonna _session corrente nel database, quando gli utenti hanno eseguito il login nella sessione corrente nella tabella qui assumiamo che il tempo di accesso è impostato su 20 minuti e l'utente dopo l'accesso chiude il browser e di nuovo nel prossimo 10 minuti, quindi qui abbiamo il suo vecchio set di sessioni che è valido per 20 minuti, ma in realtà l'ultima volta che ha chiuso il browser così questa volta avrà un nuovo id di sessione, quindi coglieremo questa mancata corrispondenza di sessione e qui chiederò all'utente di accedi nuovamente eliminando il vecchio record che abbiamo mantenuto.

2

Solo per chi potrebbe aver bisogno di questo in futuro.

Quando un utente crea una sessione o effettua il login, è possibile prendere l'id di sessione che genera e memorizzarlo in una colonna nel proprio database con l'account dell'utente. Quindi, in ciascuna pagina dell'applicazione, eseguire un controllo per verificare se l'ID sessione corrente corrisponde a quello memorizzato nel database per quell'utente. In caso contrario, elimina la sessione corrente e reindirizzali a una pagina di accesso.

In questo modo, l'ID di sessione sarà diverso su ogni dispositivo che stanno utilizzando per accedere.

+0

Cosa succede se gli utenti condividono lo stesso cookie, quindi la stessa sessione? – antoineg

Problemi correlati