Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2005, 01:24
jhawslow
 
Fecha de Ingreso: septiembre-2003
Mensajes: 47
Antigüedad: 23 años, 1 mes
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