Come limiterò il numero di utenti loggati in base alla sessione?

2

Ho un software (in cloud) con così tanti utenti registrati.

Voglio limitare il numero di utenti loggati alla volta a un determinato numero (configurazione basata, diciamo 100).

Se l'utente 101 tenta di accedere dovrebbe essere messo in coda con priorità 1, successivamente 102 utente dovrebbe essere 2 in coda, so che ogni volta che una richiesta degli utenti registrati sta colpendo il server il tempo di accesso sess_file sarà essere aggiornato.

Quale dovrebbe essere la logica da qui? Devo controllare l'ultimo orario di accesso di tutti sess_file e disconnettere gli usi inattivi? e come gestirò la coda di attesa?

Il software è fatto con PHP-MySQL.

Quando l'utente ha effettuato l'accesso, contrassegno la colonna come registrato nella tabella utente e quando viene caricata la pagina di accesso se il numero totale di utenti connessi è 100, l'utente 101 che sta tentando di accedere è diretto a una pagina intermedia che controllerà tramite una chiamata ajax attivata a un intervallo di 5 minuti che se un utente viene disconnesso. Se è disponibile uno slot, reindirizza alla pagina di accesso, effettua automaticamente il login e reindirizza al dashboard dell'utente. Ma voglio sapere che ci sono buone pratiche.

Per lo più, voglio sapere che l'invalidazione dell'utente connesso verificando il tempo di accesso di sess_file è il modo giusto per farlo?

    
posta zamil 28.08.2013 - 11:04
fonte

3 risposte

1

Prima di tutto, inserisci i dati della sessione in un database, non fare affidamento sui file. Una volta nel database, sarebbe abbastanza facile tenere traccia del numero di sessioni attive con una semplice query.

Il problema principale che devi affrontare è determinare se un utente è inattivo o ha chiuso il browser anziché disconnettersi manualmente. Avrai bisogno di una sorta di connessione 'keep alive' che dice al tuo server che la persona è ancora loggata. Una semplice richiesta di ajax ogni 30 secondi circa dovrebbe fare il trucco. Se il server smette di riceverlo, sai di contrassegnare quella sessione come disconnessa.

    
risposta data 28.08.2013 - 18:16
fonte
1

When the user is logged in I mark the column as logged in in user table, and when the log-in page is loaded if the total logged in user count is 100, the 101 user who is trying to log-in is redirected

Modificherei tale approccio per consentire a tutti gli utenti di accedere, ma se il numero di utenti attivi supera 100, reindirizza il nuovo utente a una pagina di attesa. La loro sessione viene creata ma ora sono in coda per lasciare la pagina di attesa.

Ciò consente agli utenti di accedere molto più facilmente, poiché non è più necessario tenere traccia dei 100 utenti registrati. Puoi semplicemente ordinare per ID record della tabella di sessione. Questo approccio presuppone che si stiano monitorando le sessioni con una tabella di sessione nel proprio database. Quando un utente si disconnette, cancelli il suo record di sessione dalla tabella.

Si presume che si stia utilizzando un numero intero di incremento automatico per la colonna ID.

Per verificare se l'utente corrente debba essere messo in attesa è molto semplice.

SELECT 'id' FROM 'sessions' ORDER BY 'id' LIMIT 1;

Utilizzando il primo id nella tabella puoi verificare rapidamente se l'utente si trova nelle prime 100 sessioni.

$id = query('SELECT 'id' FROM 'sessions' ORDER BY 'id' LIMIT 1');
if($my_session_id > $id+100)
{
   // this user is placed in holding
}
else
{
   // this user has full access
}

Non appena un record sopra l'uso corrente viene cancellato. Si spostano automaticamente in coda.

    
risposta data 28.08.2013 - 19:17
fonte
-1

La mia prima ideia è di eseguire una funzione quando un utente accede, quindi incrementa il conteggio +1, e poi quando l'utente si disconnette, diminuisce il conteggio in -1. Un singolo campo di database può risolvere questo problema e fare ciò che stai proponendo quando il conteggio raggiunge 100 utenti registrati!

Voglio dire che in realtà è piuttosto semplice e molto utile, inviami le tue funzioni di login e logout (basate sulla sessione) e posso mostrarti alcuni modi per farlo!

    
risposta data 28.08.2013 - 17:05
fonte

Leggi altre domande sui tag