2010-11-02 8 views
5

J'ai une application PHP que je cherche à limiter le nombre d'utilisateurs qui peuvent être actifs à un moment donné. Je voudrais le garder le plus léger possible car la raison de sa mise en œuvre est que notre serveur actuel ne peut pas gérer la charge - c'est donc une solution temporaire jusqu'à ce que nous puissions mettre à niveau. Nous stockons nos sessions dans memcache donc j'ai écrit le script suivant pour compter les sessions actives et les stocker dans un fichier plat - ce script est lancé toutes les 5 minutes.Limite d'utilisateur pour mon application PHP - avec le code d'exemple

<?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); 
?> 

maintenant en haut de chaque page il est facile de savoir combien d'utilisateurs sont actuellement actifs ... mon problème est maintenant s'il y a plus que la limite d'arrêter plus de gens la création de sessions. La raison pour laquelle cela est un problème est que je n'ai aucun moyen de dire si l'utilisateur chargement de la page a déjà une session active sans faire quelque chose comme:

<?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; 
} 
?> 

qui devrait faire l'affaire, mais dans le processus, il va créer un session pour vérifier si la session existe: S ... faussant ainsi mon compte de session active.

Donc essentiellement j'ai une solution ... ma question cependant est-ce que quelqu'un en a une meilleure? Si toutefois vous pensez que ma solution est le meilleur s'il vous plaît commentaire ou up-voix pour me faire savoir: D

S'il vous plaît aider :)

+0

Tant de vues et pas un peu de commentaires: S –

+0

Double emploi possible de [Compter et limiter le nombre d'utilisateurs sur mon application] (http://stackoverflow.com/questions/4065026/). – netcoder

Répondre

8

Si vous appelez session_id() sans aucun paramètre, il retournera id sesssion actuel de l'utilisateur ou une chaîne vide s'il n'y a pas d'identifiant de session en cours, comme indiqué dans le PHP function manual. Sur la base de ce que vous avez, vous aurez envie de faire quelque chose comme ceci:

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(); 

Ceci est juste un raccourci qui vérifie si un cookie avec le nom de la session, et si oui, que la valeur est une session valide chaîne d'identification.

+1

Vous mon ami êtes une vraie légende: D –

+0

Pas de problème. Une chose à retenir est que le suivi des utilisateurs actifs n'est pas vraiment la même chose que les sessions actives, mais il semble que vous l'obteniez. – DrPerdix