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

Sistema de Log de usuarios usando Global.asa

Estas en el tema de Sistema de Log de usuarios usando Global.asa en el foro de ASP Clásico en Foros del Web. Hola, estoy haciendo un sistema donde quiero saber que usuarios han entrado, cuantas veces, con hora, dia y sobretodo el tiempo conectado, se que la ...
  #1 (permalink)  
Antiguo 18/05/2007, 17:12
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 23 años, 4 meses
Puntos: 16
Sistema de Log de usuarios usando Global.asa

Hola, estoy haciendo un sistema donde quiero saber que usuarios han entrado, cuantas veces, con hora, dia y sobretodo el tiempo conectado, se que la primera parte de lo que quiero hacer se puede simplemente al ingresar el usuario, eso podria hacerlo, lo que no se como es saber el tiempo que duran conectados, toda esta info la guardaria en un archivo de texto (log) para cada usuario...supongo que esto es mas ligero para el server que meterlo en una base de datos...

tengo una vaga idea de como poder hacerlo, supongo que es en el global.asa metiendo una funcion en el manero de las sessiones, es ahi donde me pierdo, ojala me puedan ayudar

gracias de antemano
  #2 (permalink)  
Antiguo 18/05/2007, 17:43
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 1 mes
Puntos: 88
Re: Sistema de Log de usuarios usando Global.asa

sera algo similar a esto???
GLOBAL.ASA

Código PHP:
<object runat="Server" scope="Application"
id="rstActiveUsers" progid="ADODB.Recordset">
</
object>

<
script language="VBScript" runat="Server">
' The first thing you should notice is the top line.
It creates an application scoped recordset object
' named rstActiveUsers that I'll use to store all
' our user information.
'
' Note: I'
ve wrapped it for readability 
en esta seccion especificas que campos usaras para almacenar, cualquier cosa, por ejemplo los campos que pedias
Código PHP:
Sub Application_OnStart()
    
' Selected constants from adovbs.inc
    Const adInteger = 3
    Const adVarChar = 200
    Const adDate = 7
    
    ' 
Here I set up in memory active user recordset
    
' by adding the fields I want to it and defining
    ' 
their data types.
    
rstActiveUsers.Fields.Append "id"adInteger
    rstActiveUsers
.Fields.Append "ip"adVarChar15
    rstActiveUsers
.Fields.Append "browser"adVarChar255
    rstActiveUsers
.Fields.Append "started"adDate
    rstActiveUsers
.Fields.Append "finish"adDate

    
' Next I open our recordset so that we can use it.
    ' 
That basically gets everything ready for our
     first user
.
    
rstActiveUsers.Open
    Application
("NumVisitas") = 0
End Sub 
ahora bien, tiempo de duracion, si el usuario no estaba, se asignan los campos, se graba
Código PHP:
Sub Session_OnStart()
    
' Set session timeout to 20 minutes
    Session.Timeout = 20

    ' 
Set a session start time.  This is pretty pointless,
    
' but it does ensure that we start a session and
    ' 
assign the user a session id and it can help
    
' troubleshooting if we ever need it.
    Session("Start") = Now()
    
    ' 
Move to the end so records are added in order.
    
' Again not of any real importance, but it keeps our
    ' 
user table nice and orderly.
    If 
Not rstActiveUsers.EOF Then rstActiveUsers.MoveLast

    
' Add a record and insert users data.  I'm just
    
' storing some basic info, but naturally you're free
    
' to store whatever you want.
    rstActiveUsers.AddNew
    
    rstActiveUsers.Fields("id").Value = _
        Session.SessionID
    
    rstActiveUsers.Fields("ip").Value = _
        Request.ServerVariables("REMOTE_HOST")
    
    rstActiveUsers.Fields("browser").Value = _
        Request.ServerVariables("HTTP_USER_AGENT")
    
    rstActiveUsers.Fields("started").Value = _
        Now()
    
    rstActiveUsers.Update
    
    ' 
Now that we've got the information, all that's
    
' left is to display it.  See test_page.asp for a
    ' 
demo.  It includes the pages show_count.asp and
    
' show_users.asp which can also be used
    ' 
individually if desired.
    
Application.lock()
    
Application("NumVisitas") = Application("NumVisitas") + 1
    Application
.unlock()
End Sub 
esta es la parte de salida de session, se pudiera tomar el tiempo en la salida, y lo compararias con la
rstActiveUsers.Fields.Append "started"
y te daria el tiempo de uso
Código PHP:
Sub Session_OnEnd()
    
' Selected constants from adovbs.inc
    Const adAffectCurrent = 1

    ' 
Start at the first record
    rstActiveUsers
.MoveFirst
    
    
' Check each record for the SessionID
    Do While Not rstActiveUsers.EOF
        ' 
Do conversion to Long to be sure we're
        ' 
comparing the same data type.
        If 
CLng(rstActiveUsers.Fields("id").Value) = _
            CLng
(Session.SessionIDThen
            rstActiveUsers
.Delete adAffectCurrent
        End 
If
        
        
rstActiveUsers.MoveNext
    Loop
    
    rstActiveUsers
.Update
     Application
.lock()
     
Application("NumSesion") = Application("NumSesion") - 1
     Application
.unlock()
End Sub 
Bueno, ya sabes que esto sucede cuando se apaga el equipo
Código PHP:
Sub Application_OnEnd()
    
' Not like it really matters, but for the sake of
    ' 
good coding practice I close the recordset when
     our application is shutting down
.
    
rstActiveUsers.Close
End Sub 
realmente espero que te de una guia, a lo que necesitas

suerte
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 18/05/2007, 18:48
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 23 años, 4 meses
Puntos: 16
Re: Sistema de Log de usuarios usando Global.asa

fijate que no pude implementar tu sistema, el cual te agradezco pero creo que es por la forma de llamar a la base de datos (supongo) uso mysql, a final de cuentas hice esto (que no funciona)
Código:
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
    Application.Lock
        Application("Active") = 0
    Application.Unlock
End Sub

Sub Session_OnStart

    Set conexion = Server.CreateObject("ADODB.Connection")
    Set RS = Server.CreateObject("ADODB.Recordset")
    conexion.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=xxx.x.x.x;PORT=3306;DATABASE=xxx; USER=xx;PASSWORD=xxx;OPTION=3;"
    
    sql="Select * From conexiones WHERE id=" & Session.SessionID
    rs.open sql, conexion,2,3,1
    
    Session.Timeout = 20
    
    If rs.EOF Then rs.AddNew
    
    rs("id") = Session.SessionID
    rs("ip") = Request.ServerVariables("REMOTE_HOST")
    rs("inicio") = Now()
    rs("usuario") = Session("user")
    
    rs.Update
    
    Application.lock()
        Application("NumVisitas") = Application("NumVisitas") + 1
    Application.unlock()
    
    rs.close
        
End Sub

Sub Session_OnEnd
    sql="Select * From conexiones WHERE id=" & Session.SessionID
    rs.open sql, conexion,2,3,1

    'if not rs.eof then 
    rs("fin") = Now()

    rs.Update
    rs.close
    
     Application.lock()
         Application("NumSesion") = Application("NumSesion") - 1
     Application.unlock()
End Sub

Sub Application_OnEnd
    rs.close
End Sub
</SCRIPT>
Me graba, el sessionid, la hora de inicio y la ip pero no la hora de fin ni el usuario, ademas me guarda la informacion hasta que cierro la session... me imagino que si cierro mi session borrando todas las "sessiones" pues no se como habria de identificar en la base de datos el registro al cual ponerle la hora de fin... ando empelotado

Última edición por sjam7; 18/05/2007 a las 19:13
  #4 (permalink)  
Antiguo 18/05/2007, 19:00
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 1 mes
Puntos: 88
Re: Sistema de Log de usuarios usando Global.asa

si te fijas, este global.asa que uso, crea un objeto

<
object runat="Server" scope="Application"
id="rstActiveUsers" progid="ADODB.Recordset">
</
object>


el cual, almacena de forma virtual los datos de esos campo

deja trato de recrear tu codigo en mi equipo, a lo mejor mediante parametros a una pagina de MANTENIMIENTO.ASP, puedira ser mas factible para ti
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #5 (permalink)  
Antiguo 18/05/2007, 19:09
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 1 mes
Puntos: 88
Re: Sistema de Log de usuarios usando Global.asa

estaba mirando esta parte mira sjam7

Código PHP:
     If rs.EOF Then rs.AddNew
    
        rs
("id") = Session.SessionID
        rs
("ip") = Request.ServerVariables("REMOTE_HOST")
        
rs("inicio") = Now()
        
rs("usuario") = Session("user")
    
    
rs.Update 
ausencia de END IF
creo que deberia ir asi mira

Código PHP:
 If rs.EOF Then 
    rs
.AddNew
    
        rs
("id") = Session.SessionID
        rs
("ip") = Request.ServerVariables("REMOTE_HOST")
        
rs("inicio") = Now()
        
rs("usuario") = Session("user")
    
    
rs.Update
END 
IF 
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra

Última edición por Shiryu_Libra; 18/05/2007 a las 19:21
  #6 (permalink)  
Antiguo 18/05/2007, 19:39
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 23 años, 4 meses
Puntos: 16
Re: Sistema de Log de usuarios usando Global.asa

[quote=Shiryu_Libra;2009466]estaba mirando esta parte mira sjam7

Código PHP:
If rs.EOF Then rs.AddNew 
Bueno, lo habia puesto en una sola linea, de cualquier forma lo puse como lo pusiste y sale todo igual...

fijate que me fui por el lado de usar cookies, deje el codigo asi:

Código:
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
    Application.Lock
        Application("Active") = 0
    Application.Unlock
End Sub

Sub Session_OnStart

    sesion=request.cookies("sesion")
    inicio=request.cookies("inicio")
    usuario=request.cookies("user")
    
    if sesion="" then sesion=session.SessionID
    if inicio="" then inicio=now()

    Set conexion = Server.CreateObject("ADODB.Connection")
    Set RS = Server.CreateObject("ADODB.Recordset")
    conexion.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=xxxxx;PORT=3306;DATABASE=xxx; USER=xx;PASSWORD=xxx;OPTION=3;"
    
    sql="Select * From conexiones WHERE sesion_id=" & sesion
    rs.open sql, conexion,2,3,1
    
    If rs.EOF Then
    rs.AddNew
    
    rs("sesion_id") = CLng(sesion)
    rs("ip") = Request.ServerVariables("REMOTE_HOST")
    rs("inicio") = inicio
    rs("usuario") = usuario
    
    rs.Update
    end if
    
    Application.lock()
        Application("NumVisitas") = Application("NumVisitas") + 1
    Application.unlock()
    
    rs.close
        
End Sub


Sub Session_OnEnd

    sesion=request.cookies("sesion")
    inicio=request.cookies("inicio")
    usuario=request.cookies("user")
    
    if sesion="" then sesion=session.SessionID
    if inicio="" then inicio=now()

    sql="Select * From conexiones WHERE sesion_id=" & sesion
    rs.open sql, conexion,2,3,1

    if not rs.eof then 
        rs("fin") = Now()
    end if
    
    rs.Update
    rs.close
    
     Application.lock()
         Application("NumSesion") = Application("NumSesion") - 1
     Application.unlock()
End Sub

Sub Application_OnEnd
    rs.close
End Sub
</SCRIPT>
y que crees...no funciona , me guarda todos los damos menos el de salida, la base de datos tiene los siguientes campos:
id, sesion_id, usuario, inicio, fin, ip y es una MySQL.

Las cookies que uso las creo al momento de ingresar como usuario asi:
Código:
response.cookies("inicio")=now()
response.Cookies("sesion")=session.SessionID
response.Cookies("user")=rs("usuario")
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 15:41.