2010-11-02 4 views
5

Ho un'app PHP che sto cercando di limitare il numero di utenti che possono essere attivi in ​​qualsiasi momento. Vorrei mantenerlo il più leggero possibile poiché il motivo per implementarlo è perché il nostro attuale server non è in grado di gestire il carico, quindi questa è una soluzione temporanea finché non potremo eseguire l'aggiornamento. Archiviamo le nostre sessioni in memcache, quindi ho scritto il seguente script per contare le sessioni attive e archiviarlo in un file flat: questo script viene eseguito ogni 5 minuti.Limite utente per la mia app PHP - con codice di esempio

<?php 
    $memcache = new Memcache; 
    $memcache->connect('127.0.0.1', 11211); 
    $activeSessions = $memcache->getStats(); 


$file_content = <<<TEXT 
<?php 

\$activeSessions = {$activeSessions['curr_items']}; 

?> 
TEXT; 

file_put_contents("activesessions.php", $file_content); 
?> 

Ora nella parte superiore di ogni pagina è facile scoprire come molti utenti sono al momento attivi ... il mio problema ora è se c'è più rispetto al limite di smettere di più persone la creazione di sessioni. Il motivo per cui questo è un problema è che non ho modo di sapere se l'utente carica già la pagina ha una sessione attiva senza fare qualcosa di simile:

<?php 

include ('activesessions.php'); 
//uid is the users facebook id 
session_id(md5($uid.$secret)); 
session_start(); 
if ($activeSessions > $limit && empty($_SESSION)) 
{ 
    session_destroy(); 
    include('limit_message.php'); 
    exit; 
} 
?> 

che dovrebbe fare il trucco, ma nel processo si creerà una sessione per verificare se la sessione esiste: S ... in tal modo distorcendo il conteggio della sessione attiva.

Quindi in sostanza ho una soluzione ... la mia domanda però è che qualcuno ne abbia una migliore? Se invece pensate che la mia soluzione è la migliore si prega di commento o di up-voto per farmi sapere: D

Si prega di aiutare :)

+0

Così tante visualizzazioni e non un po 'di feedback: S –

+0

Possibile duplicato di [Conta e limita il numero di utenti sulla mia app] (http://stackoverflow.com/questions/4065026/). – netcoder

risposta

8

Se si chiama session_id() senza parametri tornerà corrente id sesssion dell'utente o una stringa vuota se non esiste un ID di sessione corrente, come indicato nel PHP function manual. In base a quello che hai, ti consigliamo di fare qualcosa di simile:

include ('activesessions.php'); 
//uid is the users facebook id 

if ($activeSessions > $limit && session_id() == '') 
{ 
    include('limit_message.php'); 
    exit; 
} 

session_id(md5($uid.$secret)); 
session_start(); 

Questa è solo una scorciatoia che controlla se un cookie viene impostato con il nome della sessione, e in tal caso che il valore è una sessione valida stringa di identificazione.

+1

I miei amici sono una vera leggenda: D –

+0

Nessun problema. Una cosa da ricordare è che tenere traccia degli utenti attivi non è proprio la stessa cosa delle sessioni attive, ma sembra che tu abbia capito. – DrPerdix

Problemi correlati