Foros del Web » Programando para Internet » PHP »

Módulo Who's Online ¿?

Estas en el tema de Módulo Who's Online ¿? en el foro de PHP en Foros del Web. Hola, estoy tratando de hacer un módulo de vsitantes discriminando usuarios logueados de anónimos y tengo una serie de problemillas. Trascribo el script a ver ...
  #1 (permalink)  
Antiguo 18/06/2005, 11:01
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Módulo Who's Online ¿?

Hola, estoy tratando de hacer un módulo de vsitantes discriminando usuarios logueados de anónimos y tengo una serie de problemillas.
Trascribo el script a ver si alguien me puede dar una manito. Lo coloco con un require en todas las páginas del sitio.

$tiempo_logout = 60000;
// segundos tras los cuales un usuario es marcado como inactivo, había puesto 600 pero la diferencia entre $tiempo_logout y $tiempo (time()actual) es inmensa me da 5 cifras
require_once("config.php");
$ip = $REMOTE_ADDR;
$t = mysql_query("select * from sesiones where sesion_ip='$ip' limit 1");

// encuentro la última visita
$ti = mysql_fetch_array($t);
$tiempo = time(); // tiempo actual
$dif = $tiempo - $ti[sesion_tiempo];

// esta diferencia me da un resultado de 5 cifras aunque pasen 30 segundos entre F5's
echo time()."<br>";
echo "$dif = $tiempo - $ti[sesion_tiempo]";

// esto está puesto por control, después se elimina
$fecha = date("Y-m-d");
// tomo la fecha actual
if ($ti[sesion_fecha] == $fecha) {
// compruebo que la última visita desde esta IP sea del día de hoy
mysql_query("update sesiones set sesion_activo='0' where sesion_activo='1' and ($dif >= $tiempo_logout)");
// llevo todas las sesiones activas a inactivas cuya diferencia de tiempo sea > que $tiempo_logout
if ($dif <= $tiempo_logout) {
// si está dentro del tiempo actualizo el registro siempre que esté activa
mysql_query("update sesiones set sesion_id_us='$usuario',sesion_ip='$ip',sesion_tie mpo='$tiempo',sesion_activo='1' where sesion_ip='$ti[sesion_ip]' and sesion_fecha='$ti[sesion_fecha]' and sesion_activo='1'");
}
else if ($dif > $tiempo_logout) {

// lo inverso
mysql_query("update sesiones set sesion_activo='0' where sesion_ip='$ti[sesion_ip]'");
// llevo todas las sesiones de esta IP a inactivo
mysql_query("insert into sesiones set sesion_id_us='$usuario',sesion_ip='$ip',sesion_tie mpo='$tiempo',sesion_fecha='$fecha',sesion_activo= '1'");
// inserto un nuevo registro
}
}
else {

// si la fecha de la BD no es == al día actual
mysql_query("insert into sesiones set sesion_id_us='$usuario',sesion_ip='$ip',sesion_tie mpo='$tiempo',sesion_fecha='$fecha',sesion_activo= '1'");
// inserto una nueva sesión
}

El tema es que o no me actualiza sesiones e inserta entonces me hace una tabla gigante. La idea era que sobreescriba cuando estén activas.

A posteriori quería usar esos datos para poder generar reportes de estadísticas del sitio y además colocar (eso ya lo tengo armado) un bloque tipo "Who's Online".

Espero me den una manito, intenté armarlo tomando los datos de las sesiones pero no lo pude hacer andar.
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE

Última edición por jpvilar; 18/06/2005 a las 11:02 Razón: Título erróneo
  #2 (permalink)  
Antiguo 18/06/2005, 11:34
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Yo hice uno con este script, pero cambiando nada más la $ip por la SESSIONID que propaga mi página y funciona a la perfección. Tu sistema es facil, solo tienes que meterle mas coco, ahí tienes una buena pista
  #3 (permalink)  
Antiguo 18/06/2005, 11:52
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Gracias lado2mx, pruebo con la SESSID. En realidad tal vez sea más "personalizado" de esa manera que con la IP pero igual no me cierra del todo.
Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #4 (permalink)  
Antiguo 18/06/2005, 21:09
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Bueno, ha quedado funcionando (creo ... jeje) usando el sessid que me dijiste lado2mx, paso el script para que lo vean y si sirve, que se aproveche o corrija.

$tiempo_logout = 600; // segundos tras los cuales un usuario es marcado como inactivo
require_once("config.php");
$ip = $REMOTE_ADDR;
$session = session_id();
$t = mysql_query("select * from sesiones where sesion_id_session='$session' order by sesion_tiempo desc");
$ti = mysql_fetch_array($t);
$tiempo = time();
$dif = $tiempo - $ti[sesion_tiempo];
$dif2 = $tiempo - $tiempo_logout;
$fecha = date("Y-m-d");
if ($ti[sesion_fecha] == $fecha) {
mysql_query("update sesiones set sesion_activo='0' where sesion_activo='1' and sesion_tiempo<'$dif2'");
if ($dif <= $tiempo_logout) {
mysql_query("update sesiones set sesion_id_us='$usuario',sesion_id_session='$sessio n',sesion_ip='$ip',sesion_tiempo='$tiempo',sesion_ activo='1' where sesion_id_session='$session' and sesion_fecha='$ti[sesion_fecha]' and sesion_activo='1'");
}
else if ($dif > $tiempo_logout) {
mysql_query("update sesiones set sesion_activo='0' where sesion_id_session='$session'");
mysql_query("insert into sesiones set sesion_id_us='$usuario',sesion_ip='$ip',sesion_id_ session='$session',sesion_tiempo='$tiempo',sesion_ fecha='$fecha',sesion_activo='1'");
}
}
else {
mysql_query("insert into sesiones set sesion_id_us='$usuario',sesion_ip='$ip',sesion_id_ session='$session',sesion_tiempo='$tiempo',sesion_ fecha='$fecha',sesion_activo='1'");
}

Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:19.