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

Lista de usuarios activos

Estas en el tema de Lista de usuarios activos en el foro de ASP Clásico en Foros del Web. La siguiente lógica sirve para obtener un listado de usuarios que actualmente tienen una sesion abierta en algún sitio. Aquí no obtendras solo un número ...
  #1 (permalink)  
Antiguo 20/02/2002, 15:40
 
Fecha de Ingreso: octubre-2000
Ubicación: Juarez, Chih.
Mensajes: 161
Antigüedad: 23 años, 8 meses
Puntos: 0
Lista de usuarios activos

La siguiente lógica sirve para obtener un listado de usuarios que actualmente tienen una sesion abierta en algún sitio.

Aquí no obtendras solo un número x de usuarios activos, lo que obtendrás es un listado de nombres de usuarios activos.

Aquí haremos uso de Session.SessionID que es un numero aleatorio de 9 digitos que se genera al ejecutarse la subrutina Sub Session_OnStart ubicada en el archivo global.asa

Necesitarás tener una base de datos con permisos de escritura con los siguientes campos:

Sesion (texto,9)
Entrada (date/time)
Salida (date/time)
Usuario (text,x)

Ok, actualmente en la página que usas para validar usuarios, y ahí mismo en alguna parte donde ya se haya validado el login y password, teclea el siguiente código...

<%
If validado then 'edita esta línea a tus espécificaciones

On error resume next
set connVBx = server.createobject("ADODB.Connection")
bd= "/sesiones.mdb"
connVBx.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath(bd)
set Tablax = server.CreateObject("ADODB.Recordset")
Tablax.open "SELECT * from sesiones",connVBx,3,2

Tablax.AddNew
Tablax("Sesion") = Session.SessionId
Tablax("Entrada") = Now()
Tablax("Usuario") = Nombre_usuario_validado
Tablax.Update

Tablax.Close
set Tablax = nothing
connVBx.Close
set connVBx = nothing

End if
%>

Al hacer esto generarás un registro en la base de datos con el siguiente ejemplo de información....

Sesion = "158763258"
Entrada = "2/20/2002 11:54:03 AM"
Salida = ""
Usuario = "vgaray"

Nota: El código anterior va en la página donde validas al usuario

  #2 (permalink)  
Antiguo 20/02/2002, 15:52
 
Fecha de Ingreso: octubre-2000
Ubicación: Juarez, Chih.
Mensajes: 161
Antigüedad: 23 años, 8 meses
Puntos: 0
Re: Lista de usuarios activos

Continuación...

Ahora; en el archivo global.asa, coloca lo siguiente en la sección apropiada...

Sub Session_OnEnd

On error resume next
set connVB = server.createobject("ADODB.Connection")
bd= "/sesiones.mdb"
connVB.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath(bd)
set Tabla = server.CreateObject("ADODB.Recordset")
Tabla.open "SELECT * from sesiones where sesion='"& Session.SessionID &"'",connVB,3,2
Tabla("Salida") = Now()
Tabla.Update

Tabla.Close
set Tabla = nothing
connVB.Close
set connVB = nothing

End sub

Listo, lo que haces con el código anterior es buscar al usuario con Session.SessionId actual y editas el campo 'Salida'.

Ahora ya solo crea un página que leerá esa base de datos y muestra los nombres de los usuario que tengan un valor nulo o vació en el campo 'Salida' para listar los 'Nombres de Usuario Activos'.

Otro cosa que podrías agregar es un campo para obtener la diferencia entre los campos 'Entrada' y 'Salida' y sacarás el tiempo que ese usuario visitó tu sitio.

Para probar este código edita la línea...

Session.Timeout=120 'lo default

por esta...

Session.Timeout = 5

(Lo anterior es solo para hacer un prueba rápida)

Nota. Al terminar de hacer las pruebas te recomiendo (abir un pagina de tu sitio y luego cerrar tu navegador) no olvidar poner el valor original de Session.Timeout

Que quedé claro que una sesion de inicia al abrir una página en tu sitio y termina cuando cierras tu navegador o cuando se expira la sesion nombrada en la variable anterior.

PD: Diego, las lógicas que estoy publicando en la sección 'Tips' del foro ASP son mías y cuando no lo sean lo haré saber.


---------------------
Tan libre como gratuito!!!
  #3 (permalink)  
Antiguo 20/02/2002, 21:22
Avatar de Aston  
Fecha de Ingreso: mayo-2001
Ubicación: Madrid
Mensajes: 933
Antigüedad: 23 años, 1 mes
Puntos: 0
Re: Lista de usuarios activos

Otro ejemplo genial de cómo hacer fácil las cosas. Je je VGaray, ¡Estás en racha! Un abrazote, amigo. :) ;) :P

<a href="http://www.laventanita.net/" target="_blank">
<img src="http://www.breogan.org/images/Aston.gif" border="0" alt="La Ventanita.net - Lo imprescindible en la red"></a>
  #4 (permalink)  
Antiguo 09/05/2002, 15:00
 
Fecha de Ingreso: mayo-2001
Ubicación: Monterrey, N.L.; México
Mensajes: 558
Antigüedad: 23 años
Puntos: 0
Re: Lista de usuarios activos

Que tal Victor !!...
Este tip no lo habia visto, se ve muy bueno, lo voy a probar porque necesito algo parecido a tu tip.

Gracias por el tip y por la ayuda a todos

Saludos.

P.D.: cuando vengas a Durango, hechame un grito para que me des unas clasesillas .

Owen Bonilla
Webmaster Weblaguna S. C.
[email protected]
[email protected]

  #5 (permalink)  
Antiguo 03/06/2002, 20:55
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 6 meses
Puntos: 1
Re: Lista de usuarios activos

no se peude hacer sin base de datos?
Yo tengo un chat que baje de tippedcow.com
que te muestra la lista de sesiones activas y no usa base de datos.
Al que este interesado se lo paso para que lo vea.
  #6 (permalink)  
Antiguo 04/06/2002, 04:48
Avatar de Ruchu  
Fecha de Ingreso: octubre-2001
Mensajes: 698
Antigüedad: 22 años, 8 meses
Puntos: 2
Re: Lista de usuarios activos

si que se podria hacer sin bd, almacenando los datos en variables de aplicacion, pero habria que rehacer casi por completo todo el codigo.
  #7 (permalink)  
Antiguo 09/07/2002, 02:56
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 6 meses
Puntos: 1
Re: Lista de usuarios activos

miren lo que encontre.
hace lo mismo pero sin base de datos.
http://www.2enetworx.com/dev/samples/memwhoson.asp
  #8 (permalink)  
Antiguo 09/07/2002, 04:14
Avatar de Mosiah  
Fecha de Ingreso: mayo-2002
Ubicación: Vitoria - Madrid
Mensajes: 229
Antigüedad: 22 años
Puntos: 0
Re: Lista de usuarios activos

Tengo entendido que las variables de sesión utilizan cookies para trabajar.
Puesto que hay gente que tiene las cookies desactivadas, ¿habría alguna forma de mantener el estado de los usuarios sin utilizar cookies ni variables de sesión?

Gracias. ;)
  #9 (permalink)  
Antiguo 20/01/2003, 13:07
Avatar de lmg7  
Fecha de Ingreso: agosto-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
He probado éste código para tener el listado de usuarios activos pero resulta que no actualiza el campo Salida cuando el usuario terminar la sesion. La página, alojada en Brinkster , contiene el siguiente global.asa:

Código:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
	'==FrontPage Generated - startspan==
	Dim FrontPage_UrlVars(1)
	'--Project Data Connection
		Application("Base_de_datos1_ConnectionString") = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=URL=tabla.mdb"
		FrontPage_UrlVars(0) = "Base_de_datos1_ConnectionString"
		Application("Base_de_datos1_ConnectionTimeout") = 15
		Application("Base_de_datos1_CommandTimeout") = 30
		Application("Base_de_datos1_CursorLocation") = 3
		Application("Base_de_datos1_RuntimeUserName") = ""
		Application("Base_de_datos1_RuntimePassword") = ""
	'--
	Application("FrontPage_UrlVars") = FrontPage_UrlVars
	'==FrontPage Generated - endspan==
End Sub
Sub Session_OnStart
	FrontPage_StartSession '==FrontPage Generated==
End Sub
Sub FrontPage_StartSession
	On Error Resume Next
	if Len(Application("FrontPage_VRoot")) > 0 then Exit Sub
	' discover the VRoot for the current page;
	' walk back up VPath until we find global.asa
	Vroot = Request.ServerVariables("PATH_INFO")
	strG1 = "global.asa"
	strG2 = "Global.asa"
	iCount = 0
	do while Len(Vroot) > 1
		idx = InStrRev(Vroot, "/")
		if idx > 0 then
			Vroot = Left(Vroot,idx)
		else
			' error; assume root web
			Vroot = "/"
		end if
		if FrontPage_FileExists(Server.MapPath(Vroot & strG1)) then exit do
		if FrontPage_FileExists(Server.MapPath(Vroot & strG2)) then exit do
		if Right(Vroot,1) = "/" then Vroot = Left(Vroot,Len(Vroot)-1)
		iCount = iCount + 1
		if iCount > 100 then
			' error; assume root web
			Vroot = "/"
			exit do
		end if
	loop
	' map all URL= attributes in _ConnectionString variables
	Application.Lock
	if Len(Application("FrontPage_VRoot")) = 0 then
		Application("FrontPage_VRoot") = Vroot
		UrlVarArray = Application("FrontPage_UrlVars")
		for i = 0 to UBound(UrlVarArray)
			if Len(UrlVarArray(i)) > 0 then FrontPage_MapUrl(UrlVarArray(i))
		next
	end if
	Application.Unlock
End Sub
Sub FrontPage_MapUrl(AppVarName)
	' convert URL attribute in conn string to absolute file location
	strVal = Application(AppVarName)
	strKey = "URL="
	idxStart = InStr(strVal, strKey)
	If idxStart = 0 Then Exit Sub
	strBefore = Left(strVal, idxStart - 1)
	idxStart = idxStart + Len(strKey)
	idxEnd = InStr(idxStart, strVal, ";")
	If idxEnd = 0 Then
		strAfter = ""
		strURL = Mid(strVal, idxStart)
	Else
		strAfter = ";" & Mid(strVal, idxEnd + 1)
		strURL = Mid(strVal, idxStart, idxEnd - idxStart)
	End If
	strOut = strBefore & Server.MapPath(Application("FrontPage_VRoot") & strURL) & strAfter
	Application(AppVarName) = strOut
End Sub
Function FrontPage_FileExists(fspath)
	On Error Resume Next
	FrontPage_FileExists = False
	set fs = CreateObject("Scripting.FileSystemObject")
	Err.Clear
	set istream = fs.OpenTextFile(fspath)
	if Err.Number = 0 then
		FrontPage_FileExists = True
		istream.Close
	end if
	set istream = Nothing
	set fs = Nothing
End Function
Sub Session_OnEnd

	On error resume next
	set connVB = server.createobject("ADODB.Connection")
	connVB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mapPath("db/sesiones.mdb")
	set Tabla = server.CreateObject("ADODB.Recordset")
	Tabla.open "SELECT * from sesiones where Sesion='"& Session.SessionID &"'",connVB,3,2 
	Tabla("Salida") = Now()
	Tabla.Update

	Tabla.Close
	set Tabla = nothing
	connVB.Close 
	set connVB = nothing

End sub </SCRIPT>
Alguna idea?
Gracias
  #10 (permalink)  
Antiguo 20/01/2003, 13:09
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 22 años, 5 meses
Puntos: 1
Brinkster no soportal el global.asa

Saludos
  #11 (permalink)  
Antiguo 20/01/2003, 13:24
Avatar de lmg7  
Fecha de Ingreso: agosto-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Ajá, eso lo explica todo.

Dos preguntas:

El PWS acepta global.asa?, pues no funca en mi PC tampoco.
Alguna sugerencia para obtener el listado de usuarios activos sin el gloabal.asa?

Saludos
  #12 (permalink)  
Antiguo 20/01/2003, 14:19
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Yo uso el Pws y si que me coge el global.asa
__________________
Tu portal de manga y anime.
  #13 (permalink)  
Antiguo 20/01/2003, 18:08
 
Fecha de Ingreso: abril-2002
Mensajes: 64
Antigüedad: 22 años, 2 meses
Puntos: 1
Tambien no me toma el Global.asa

Saludos!

Yo probe el codigo y me anda muy bien en mi maquina, pero lo subi a mi server y no me anda!!!!!! Tengo IIS 5 en las dos maquinas, en el servidor principal tengo la aplicacion en un sitio virtual que depende de mi dominio principal, el global.asa lo tengo en este sitio no en el dominio principal, no tiene nada que ver o si??

Que me recomiendan que haga?
Les agradecere mucho si me pueden ayudar ya que me urge bastante!

Gracias
Barajaz
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 21:41.