Contando visitantes activos con PHP
Efectivamente, ASP permite una gestión más accesible de
las sesiones por medio del famoso archivo global.asa. Esto no quiere decir sin embargo,
que PHP es incapaz de realizar el mismo tipo de tareas sino que, más bien, hemos de
trabajar un poco más para conseguirlas. En efecto, todos los lenguajes tienen sus pros y
sus contras y, en este caso particular, ASP resulta más versátil aunque hay que admitir
que, con su versión 4, PHP ha mejorado mucho en todo lo que respecta al tratamiento de
sesiones.
Aquí os mostramos una forma sencilla de contabilizar los
usuarios activos de vuestro sitio usando para ese propósito una tabla. Dentro de dicha
tabla, iremos almacenando los distintos números IP de los visitantes de nuestro sitio y
la hora y fecha en la que el visitante ha ejecutado por ultima vez el script.
Asimismo, la tabla ha de ir borrando progresivamente las
sesiones que no hayan sido renovadas en un tiempo que nosotros consideremos límite.
Nosotros hemos fijado dicho límite en 24 minutos que es el tiempo máximo tomado por
defecto por PHP para suprimir los datos de una sesión. Para modificar este tiempo de vida
máxima de una sesión puede hacerse en el php.ini a partir del parámetro
session.gc_maxlifetime donde expresaremos dicho plazo en segundos. Ojo, este tiempo
máximo es restaurado a su valor inicial cada vez que el usuario realiza una petición al
servidor, esto quiere decir que un visitante podrá navegar cuanto tiempo quiera por el
sitio guardando la misma sesión siempre y cuando no se quede más de 24 minutos sin
realizar ningún tipo de acción.
Para el correcto funcionamiento del script, es necesario
antes de nada crear una tabla en nuestra base de datos. Esta sentencia SQL puede ayudaros
en la tarea:
CREATE TABLE control_ip ( ip VARCHAR(15) NOT
NULL, fecha INT(14) UNSIGNED NOT NULL, INDEX (ip) );
Como veis, el campo ip, que almacena el número IP del
visitante, está indexado. Esto nos permitirá una selección rápida. En contrapartida,
como todo campo indexado, su tamaño en memoria será doblado lo cual no tiene mucha
importancia ya que la tabla tendrá un número de registros bastante limitado. Lo
importante en efecto es que el script se ejecute rápidamente sin consumir demasiados
recursos del servidor, sobretodo teniendo en cuenta que se trata de un código que será
sistemáticamente ejecutado en cada una de las páginas del sitio.
Pasemos a continuación a mostrar el script que
utilizaremos:
<?
function usuarios_activos()
{
//permitimos el uso de la variable portadora del
numero ip en nuestra funcion
global $REMOTE_ADDR;
//asignamos un nombre memotecnico a la variable
$ip = $REMOTE_ADDR;
//definimos el momento actual
$ahora = time();
//conectamos a la base de datos
//Usad vuestros propios parametros!!
$conn = mysql_connect($host,$user,$password);
mysql_select_db($db,$conn);
//actualizamos la tabla
//borrando los registros de las ip inactivas (24 minutos)
$limite = $ahora-24*60;
$ssql = "delete from control_ip where fecha < ".$limite;
mysql_query($ssql);
//miramos si el ip del visitante existe en nuestra
tabla
$ssql = "select ip, fecha from control_ip where ip = '$ip'";
$result = mysql_query($ssql);
//si existe actualizamos el campo fecha
if (mysql_num_rows($result) != 0) $ssql = "update control_ip set
fecha = ".$ahora." where ip = '$ip'";
//si no existe insertamos el registro
correspondiente a la nueva sesion
else $ssql = "insert into control_ip (ip, fecha) values ('$ip',
$ahora)";
//ejecutamos la sentencia sql
mysql_query($ssql);
//calculamos el numero de sesiones
$ssql = "select ip from control_ip";
$result = mysql_query($ssql);
$usuarios = mysql_num_rows($result);
//liberamos memoria
mysql_free_result($result);
//devolvemos el resultado
return $usuarios;
}
?>
Podéis observar, como viene siendo norma, que el script
es expresado en forma de función. Después de definir la IP y el momento en el que el
script está siendo ejecutado, pasamos a interaccionar con la base de datos. Dentro de
este proceso, podemos distinguir distintas fases:
La función finaliza liberando el espacio de memoria
utilizado en sus consultas y enviando el resultado del cálculo efectuado.
En líneas generales el script es de fácil comprensión.
Puede que alguna de las funciones empleadas os sea desconocida. Si es así, acudid al la página oficial de PHP donde podréis
encontrar detalles en cuanto a su empleo.
Para sacar el valor proporcionado por la función a
nuestro script principal tendremos que realizar una llamada clásica del tipo:
$active_users = usuarios_activos();
He aquí en definitiva un script sencillo que puede dar a
vuestro sitio una imagen un poco más dinámica. Además, podéis utilizarlo y mejorarlo
para crear vuestro propio sistema de estadísticas internas. Eso os lo dejamos a
vosotros...
|