Foros del Web » Programando para Internet » ASP Clásico »

Lista de usuarios online

Estas en el tema de Lista de usuarios online en el foro de ASP Clásico en Foros del Web. Buenas tardes a todos, Me estoy peleando para poder sacar una lista con el 'nick' de los usuarios registrados y activos en mi pagina web ...
  #1 (permalink)  
Antiguo 31/03/2010, 09:28
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Lista de usuarios online

Buenas tardes a todos,

Me estoy peleando para poder sacar una lista con el 'nick' de los usuarios registrados y activos en mi pagina web (online)

He pensado en un campo llamado 'online' en la tabla 'usuarios' de mi BD.
0 -> offline
1-> online
Lo que pasa esque para ponerla a 0 tengo que detectar que el usuario abandona el sitio y no se como hacerlo....

Tb he pensado en si es possible mostrar todas las variables session activas en el sitio, así las filtraria con algo asi.....

If InStr(Session.Contents(i), "@") <> 0 then
muestra....
end if

Supongo que lo correcto es hacer algo en el global.asa, pero no quiero llamar a una BD desde ahí....

No se si voy bien encaminado, si me podeis decir alguna ayuda o de los ejemplos que he puesto alguna ocurrencia....

Gracias!
  #2 (permalink)  
Antiguo 31/03/2010, 09:35
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Lista de usuarios online

Por qué no quieres hacer uso de ADO dentro del evento Session_OnEnd del global.asa?
  #3 (permalink)  
Antiguo 31/03/2010, 09:53
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

No he oido hablar nunca de ello :s si sirve para lo que quiero hacer, suena interesante :)
  #4 (permalink)  
Antiguo 31/03/2010, 10:17
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

Estoy googleando pero no encuentro nada ni por donde empezar :s, contar los usuarios esta muy bien, pero me interesa sacara su login :s
  #5 (permalink)  
Antiguo 31/03/2010, 11:17
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Lista de usuarios online

No tomes los ejemplos tal cual, en lugar de contarlos y descontarlos, haz un UPDATE o un INSERT/DELETE en la tabla de usuarios o de sesionesActivas respectivamente (depende de tu diseño); luego con un simple select obtienes los Nicks o los Logins
  #6 (permalink)  
Antiguo 31/03/2010, 11:22
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

Gracias! voy a problarlo y te digo!
  #7 (permalink)  
Antiguo 31/03/2010, 11:50
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

Veamos a ver, he estado trasteando un poco :P

Código PHP:
sub session_onStart()
'sentencias a ejecutar al irse el último usuario
application.lock
application("num_usuarios") = application("num_usuarios") + 1
application.unlock
session("usuario")=request.Cookies("usuario")
dim connexio
if session("usuario")<>"" then
set connexio = Server.CreateObject ("ADoDB.connection")
connexio.open "DRIVER={Microsoft Access Driver (*.mdb)};" & "DBQ=" & Server.MapPath("/mdb-database/fcb.mdb") 
dim rs00, isql00
set rs00=Server.createObject("ADODB.Recordset")
rs00.CursorType=1
rs00.LockType=2
isql00="select * from usuarios where email='"&session("
usuario")&"'"
rs00.open isql00,connexio,1,2
rs00.fields(9)=1
rs00.update
rs00.close
end if
end sub

sub session_onEnd()
'
sentencias que se ejecutan cada vez que entra un usuario
application
.lock
application
("num_usuarios") = application("num_usuarios") - 1
application
.unlock

dim connexio
if session("usuario")<>"" then
set connexio 
Server.CreateObject ("ADoDB.connection")
connexio.open "DRIVER={Microsoft Access Driver (*.mdb)};" "DBQ=" Server.MapPath("/mdb-database/fcb.mdb"
dim rs00isql00
set rs00
=Server.createObject("ADODB.Recordset")
rs00.CursorType=1
rs00
.LockType=2
isql00
="select * from usuarios where email='"&session("usuario")&"'"
rs00.open isql00,connexio,1,2
rs00
.fields(9)=0
rs00
.update
rs00
.close
end 
if
end sub 
Cuando el usuario entra a la web y esta registrado en el campo "online" (rs00.fields(9)) pone un 1.... hasta aqui bien.....

Cuando el usuario sale de la web.... debería poner un 0 y es esto lo que no hace :S

¿Alguien sabe porque?

Muchas gracias!
  #8 (permalink)  
Antiguo 31/03/2010, 13:50
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Lista de usuarios online

Se supone que onEnd() se ejecuta cuando invoca session.abandon(), esto se ejecutaría en tu botón de Logout o Terminar sesión que supongo tienes, pero si el usuario se sale solo cerrando el navegador esto no se ejecutaría, creo que ni al pasar los 20 minutos de default que duran las sesiones.

En ASPFAQ hay un artículo con alternativas para este problema, léelas y ve si alguna de ellas te sirve.
  #9 (permalink)  
Antiguo 31/03/2010, 15:34
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

Voy a ello, gracias!
  #10 (permalink)  
Antiguo 31/03/2010, 16:10
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

Bueno, he estado leyendo y probando cositas y parece ser que para modificar el registro que busco a la hora de cerrar el navegador es bastante complicado.

¿Alguien lo ha conseguido y me podría decir como porfavor?

Muchas gracias.
  #11 (permalink)  
Antiguo 31/03/2010, 16:20
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Lista de usuarios online

y si programas una llamada ajax que actualice tu tabla en el evento onUnload del body?
  #12 (permalink)  
Antiguo 01/04/2010, 03:42
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

Buenos días,

Lo he intentado de esta forma....

FUNCION JAVASCRIPT:

<script languaje="JavaScript">
function closeuser() {
location.href='cerrar.asp';
}
</script>

BODY:
<body onunload="closeuser()">

CERRAR.ASP
<body>
<!--#include file="conexion.asp"-->
<%
if session("usuario")<>"" then
dim rs00, isql00
set rs00=Server.createObject("ADODB.Recordset")
rs00.CursorType=1
rs00.LockType=2
isql00="select * from usuarios where email='"&session("usuario")&"'"
rs00.open isql00,connexio,1,2
rs00.fields(9)=10
rs00.update
rs00.close
response.redirect("index.asp")
end if
%>
</body>

Me lo hace bien al cambiar de pagina......... pero como no cuando cierro el explorer pasa de mi..... me estoy empezando a desesperar ya :S Tan dificil es modificar un campo de una bd cuando el usuario no esta en la web? :s
  #13 (permalink)  
Antiguo 01/04/2010, 09:38
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Lista de usuarios online

Tengo un campo en la bd llamado "online" que si esta en 1 (lo modifica el session_onStart()) lo muestro online, pero quiero que si no esta en la web o la abandone el campo pase a ser 0.

He porbado todo lo que podeis leer arriba y nada...

A alguien se le ocurre como hacerlo porfavor? le estaría muy agradecido.

Gracias!
  #14 (permalink)  
Antiguo 15/04/2010, 22:40
Avatar de Sherly  
Fecha de Ingreso: septiembre-2008
Ubicación: Valles
Mensajes: 58
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Lista de usuarios online

Hola tengo el mismo problema todo hiba bien aunque no se por que cuando hago el update no me cambia el status(es el que dice si es 0 o 1) pero si me cambia el login_time que es el que coloca en 0 la ultima hora de ingreso.
Pongo codigo.
logout.php
Código PHP:
<?php
    $dbsesion 
$_SESSION['nick'];
    
$user $_SESSION['id_user'];
    
$status $_SESSION['status'];
     include(
"get_info_org.php");    
    include(
"get_info.php");
    include(
"dbconnect.php");
    
//$password=$_SESSION['password'];
    
$mod="0";
    
$query "UPDATE usuarios SET login_time='".$mod."', status='".$mod."' WHERE id_user= '".$user."'";
    
$result pg_query($query);
    if (!
$result)
    {
            echo 
"<hr>";        
            echo 
"Hay un error en la conexion con <b>".$dbname."</b> en <a href='http://".$host."'>".$host."</a><br><br>";
            echo 
"Error al procesar ".$querytime."<br>";
            exit;
    }
    echo 
$query;
    
//Se eliminan las variables almacenadas en la sesión
    
session_unset();

    
//Se destruye la sesión
    
session_destroy();

    
/*Una vez destruida la sesión se redirige a login_screen.php en caso de que se desee iniciar otra sesión
    echo '<meta http-equiv="refresh" content="0; url=login_screen.php">';
    La linea anterior realiza un refresh sobre el archivo... verficar para optimizar*/
    /*if($ref="login.php")
    {
        $_SESSION['id_user']=$id_user;
        $_SESSION['password']=$password;
        echo ("<script language='javascript'> document.location.href = 'login.php';</script>;");
    }
    else
    {*/
/*        echo ("<script language='javascript'> document.location.href = 'index.php';</script>;");*/
    //}
?>
quiero que aparesca asi
offline usertal
online user tal etc etc etc
ya lei todo lo que dicen pero la verdad aun estoy aprendiendo a trabajar en php, no se muy bien donde se coloca lo de las sesiones ni como trabajar se me ocurrio una idea pero la vdd no se si se pueda mi idea es asi. Alguien sabe como hacer para forzar a que salgan los errores del query es que no me cambia el status y tampoco me manda error como dije el login_time si lo cambia pero el status no.

Etiquetas: lista, usuarios
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 12:33.