Limita il numero di utenti in un'app Web?

6

Mi è stato chiesto di esaminare la conversione del nostro software client-server tradizionale in una versione basata sul Web (utilizzando PHP).
Una delle prime domande da parte della direzione è stata la limitazione del numero di utenti simultanei, attualmente gestiti dal nostro gestore di licenze a cui ogni client si connette quando esegue le nostre app.

I miei pensieri iniziali:

  • Controlla il numero di sessioni aperte sul server (solo con utenti validi che hanno effettuato l'accesso).
  • Registrazione di ogni accesso / uscita a una tabella DB e conteggio di essi.

Esiste un metodo standard / best practice per limitare il numero di utenti concorrenti che possono accedere a un'app Web?

    
posta SteB 17.03.2013 - 16:36
fonte

2 risposte

12

Sii molto molto attento a questo. Assicurati di avere un timeout di sessione inattiva e di sapere di cosa si tratta. Documentalo. Anche configurabile sarebbe bello.

Il motivo per cui questo è pericoloso sul web è che il ciclo di vita di una sessione non è così semplice come sembra. Le persone tendono a valutare le sessioni sulla base del percorso felice. L'utente accede, quindi si disconnette.

Ma alcune cose da considerare:

  1. Quando inizia una sessione? Le sessioni non iniziano al login. Iniziano alla prima richiesta HTTP. Anche se l'accesso è la prima pagina visitata, che succede se 100 utenti visitano il sito ma, invece di effettuare il login, partono? Hai 100 sessioni che sono essenzialmente "perse".
  2. Che cosa succede se gli utenti non si disconnettono, ma semplicemente chiudono il browser?
  3. Un utente può accedere allo stesso account utente da due diverse sessioni HTTP? In caso contrario, cosa succede se la sessione esistente non è più attiva. Se un utente ha effettuato l'accesso, chiuso il browser, ha riavviato il browser, non sarà in grado di accedere fino a quando la sessione precedente "scade" sul server Web.

Ho visto alcune di queste preoccupazioni gestite. Si può fare. Ma è complicato, quindi fai attenzione.

Se si sceglie il conteggio degli accessi e delle disconnessioni nell'approccio al database, si hanno ancora alcuni degli stessi problemi. Cosa succede se un utente non si disconnette mai, ma la sessione scade? Ho visto questo risolto in Java EE definendo un SessionBindingListener, in modo che quando una sessione scade, possiamo andare al database e invalidare il loro login. Non sono sicuro che PHP possa fare la stessa cosa. Poiché il codice PHP viene richiamato solo quando arriva una richiesta HTTP, dubito che possa essere fatto. Ma io non sono un esperto di PHP.

    
risposta data 17.03.2013 - 16:46
fonte
1

Il modo in cui implementerei ciò non è all'avvio della sessione, ma quando un utente accede per la prima volta all'applicazione.

L'approccio che prenderei sarebbe un token scorrevole che viene aggiornato con ogni richiesta HTTP autenticata degli utenti.

Potresti scrivere un lavoro CRON o richiamare uno script ad ogni richiesta per eliminare rapidamente i token scaduti dal database.

Ciò consentirebbe di gestire gli accessi separatamente dalle sessioni, come inizia una sessione per ogni utente unico che si connette. Permetterebbe anche di operare un token basato su un utente e consentire a ciascun utente più accessi. Naturalmente, questo potrebbe non essere un requisito, ma almeno lo stesso utente che ha effettuato l'accesso su una macchina in due browser Web potrebbe contare per una licenza.

Tieni a mente anche che se stai per distribuire questo all'interno delle aziende potresti voler controllare l'offuscamento del codice per impedire manomissioni / visualizzazioni.

    
risposta data 17.03.2013 - 23:13
fonte

Leggi altre domande sui tag