Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2005, 01:24
jhawslow
 
Fecha de Ingreso: septiembre-2003
Mensajes: 47
Antigüedad: 20 años, 7 meses
Puntos: 0
Usuarios registrados (jpinedo)

Buenos días:
Ante todo comentar que estoy usando el Autentificator de Cluster y me funciona correctamente. He visto por el foro la propuesta de jpinedo y estoy practicando con ella. Él comenta que funciona correctamente con la aplicación de Cluster modificando las variables de sesion $_SESSION['usuario_nombre'] por $_SESSION['usuario_login']. Seguramente algo habré hecho mal ya que me parece que algo no me cuadra.

En primer lugar creé una tabla llamada sesiones con estos datos:

Cita:
CREATE TABLE sesiones (
usuario_nombre varchar(25) NOT NULL,
tiempo varchar(14) NOT NULL,
invitado int(1) NOT NULL
);
Seguidamente la conexión a la base de datos con el archivo info.php:

Código PHP:
<?php 
$servidor
="localhost"
$usuario="*********"
$password="********"
$base="*********"
$con mysql_connect($servidor,$usuario,$password) or die ("Error en la conexión con BD ".mysql_error()); 
mysql_select_db($base,$con) or die ("Error al seleccionar BD ".mysql_error()); 
?>
A continuación la función tal y como yo la tengo llamada online.php:

Código PHP:
<? 
function online(){ 
    if (!isset(
$_SESSION['usuario_login'])){ 
        
$usuario_nombre $_SERVER['REMOTE_ADDR']; 
        
$invitado 1
    }else{ 
        
$usuario_nombre $_SESSION['usuario_login']; 
        
$invitado 0
    } 
    include (
"info.php"); 
    
$pasado time()-300;//900 segundos. Cambiar por el plazo que se quiera dar al usuario para realizar alguna acción (recargar por ejemplo). 
    
$sql "DELETE FROM sesiones WHERE tiempo < $pasado"
    
mysql_query($sql); 
    
$sql "SELECT tiempo FROM sesiones WHERE usuario_nombre='$usuario_nombre'"
    
$result mysql_query($sql) or die ("Error en función online (leer) :".mysql_error()); 
    
$tiempo time(); 
    if (
mysql_num_rows($result) == 1){ 
        
$sql "UPDATE sesiones SET usuario_nombre='$usuario_nombre', tiempo='$tiempo', invitado='$invitado' WHERE usuario_nombre='$usuario_nombre'"
    }else{ 
        
$sql "INSERT INTO sesiones (usuario_nombre, tiempo, invitado) VALUES ('$usuario_nombre', '$tiempo', '$invitado')"
    } 
    
mysql_query($sql) or die("Error en función online (actualizar) :".mysql_error); 

?>
En cada página el include a online.php

Código PHP:
include ("online.php"); 
online() 
Y aquí visualizo el resultado:

Código PHP:
<? 
include ("info.php");//conexión con BD 
$sql "SELECT usuario_nombre FROM sesiones WHERE invitado=0"
$result mysql_query($sql); 
$total_registrados mysql_num_rows($result); 
echo 
"En línea:<br />"
echo 
"Usuaris registrats: ".$total_registrados."<br />"
while (
$row mysql_fetch_array($result)){ 
    echo 
$row['usuario_nombre']."<br />"


$sql "SELECT * FROM sesiones WHERE invitado=1"
$result mysql_query($sql); 
$total_invitados mysql_num_rows($result); 
echo 
"Invitats: ".$total_invitados."<br />"
echo 
"Total usuaris en línea: ".($total_invitados $total_registrados)."<br />";
?>
Así es como lo tengo. Alomejor no hacía falta crear otra tabla y hacer uso de la de Cluster añadiendo los campos necesarios. Volviendo a lo de arriba, observo que quizás cualquier acceso a la página será contabilizado dos veces; uno al ser invitado en un principio, y dos al acceder como usuario registrado. No sé que deciros. Agradecería cualquier aclaración y rectificar si tengo alguna que esté mal.

Saludos y gracias