2010-11-02 9 views
5

Tengo una aplicación PHP que estoy buscando para limitar el número de usuarios que pueden estar activos en un momento dado. Me gustaría mantenerlo lo más ligero posible ya que el motivo para implementarlo es porque nuestro servidor actual no puede manejar la carga, por lo tanto, esta es una solución temporal hasta que podamos actualizar. Almacenamos nuestras sesiones en Memcache, así que escribí el siguiente script para contar las sesiones activas y almacenarlas en un archivo plano; este script se ejecuta cada 5 minutos.Límite de usuario para mi aplicación PHP - con el código de ejemplo

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

Ahora en la parte superior de cada página es fácil saber cuántos usuarios están actualmente activos ... mi problema ahora es si hay más que el límite para detener a más personas la creación de sesiones. La razón de por qué esto es un problema es que no tengo forma de saber si el usuario carga de la página ya tiene una sesión activa sin hacer algo como:

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

que debe hacer el truco, pero en el proceso se creará una sesión para verificar si la sesión existe: S ... por lo tanto sesgando mi cuenta de sesión activa.

Así que esencialmente tengo una solución ... mi pregunta es si alguien tiene una mejor? Sin embargo, si usted piensa que mi solución es el mejor favor comentar o hasta-voto que me permita saber: D

Por favor ayuda :)

+0

Tantas vistas y un poco de comentarios: S –

+0

Posible duplicado de [Contar y limitar el número de usuarios en mi aplicación] (http://stackoverflow.com/questions/4065026/). – netcoder

Respuesta

8

Si llama session_id() sin ningún parámetro volverá actual Identificación del sesssion del usuario o una cadena en blanco si no hay una identificación de sesión actual, como se indica en PHP function manual. Sobre la base de lo que tiene, tendrá que hacer algo como esto:

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

Esto es sólo un atajo que comprueba si una cookie se establece con el nombre de la sesión, y si es así que el valor es una sesión válida cadena de identificación.

+1

Usted mi amigo es una verdadera leyenda: D –

+0

No hay problema. Una cosa para recordar es que el seguimiento de los usuarios activos no es realmente lo mismo que las sesiones activas, pero parece que lo tienes. – DrPerdix

Cuestiones relacionadas