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

global.asa y Session_OnStart & onEnd

Estas en el tema de global.asa y Session_OnStart & onEnd en el foro de ASP Clásico en Foros del Web. Buenas gente! Alguien sabe cómo se puede referenciar al valor de la sesion que se abre o se cierra en el archivo global.asa ? Me ...
  #1 (permalink)  
Antiguo 16/04/2005, 17:50
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
global.asa y Session_OnStart & onEnd

Buenas gente!

Alguien sabe cómo se puede referenciar al valor de la sesion que se abre o se cierra en el archivo global.asa ?

Me explico: Cuando los usuarios de mi web se logan, se les activa una session (session ("user")) cuyo valor es su nick. Necesito conocer en todo momento q usuarios estan conectados, con lo que hice una tabla nueva llamada "conectados", donde cada vez q un user se logase se grabaria su nick, y cada vez q saliese, se borraria.
Así, en el global.asa puse lo siguiente:

Código:
Sub Session_OnStart
	set micon=server.CreateObject("ADODB.Connection")
	micon.open "Provider=Microsoft.Jet.OLEDB.4.0;Data source="&Server.MapPath("database.mdb")
	micon.execute("Insert into conectados (nick) values ('"&session("user")&"');")
	micon.close	
	Session.Timeout=5
End Sub

Sub Session_OnEnd
	set micon=server.CreateObject("ADODB.Connection")
	micon.open "Provider=Microsoft.Jet.OLEDB.4.0;Data source="&Server.MapPath("database.mdb")
	micon.execute("delete from conectados where nick='"&session("user")&"';")
	micon.close	
End Sub
Pero nada, mete campos vacios!!
De hecho creo que estas dos funciones no se refieren a sessions en sí, ya que por ejemplo Session_OnStart no se ejecuta cuando creas una session, sino directamente cuando entras en la página. Y OnEnd tampoco se ejecuta cuando dierras session.

Alguna pista?
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"

Última edición por renton; 16/04/2005 a las 17:59
  #2 (permalink)  
Antiguo 18/04/2005, 02:54
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 7 meses
Puntos: 18
session_onstart se comprueba cuando el usuario entra a la página (aún no está logueado), luego session("user") siempre será nulo a no ser que, mediante cookies, lo loguees automáticamente antes de insertar el registro en "conectados".

session("user")=request.cookies("user")
micon.execute("Insert into conectados (nick) values ('"&session("user")&"');")

me imagino que así funcionará. de todas maneras, global.asa y yo no nos llevamos demasiado bien
  #3 (permalink)  
Antiguo 18/04/2005, 14:44
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
Buena idea!
Además x suerte tengo hecho lo de las cookies tal como tu dices, asi q solo he de cambiar la query.

La putada será a la hora de ponerlo en "desconectado". Porque cómo y cuando sé si un user ha cerrado la ventana y ha salido de la pagina. Xq como esta la cookie nunca nadie se "desloguea" al salir.

Pensaba que poniendo en el global.asa lo del Session.Timeout=5, a los cinco minutos de no tocar la pagina se ejecutaria Session_OnEnd, donde podria pillar el session("user") y eliminarlode la tabla de conectados. Pero que va, no funciona!

Como lo harias?
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #4 (permalink)  
Antiguo 18/04/2005, 17:20
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 7 meses
Puntos: 18
si tuvieras la página montada con includes y, alguno de esos, estuviera en todas las páginas (cabecera, por ejemplo) podrías ponerle un evento en javascript que, cuando se cierre la página, abra un popup que desloguee al usuario. Esto creo que lo leí por ahí hace tiempo, o lo soñé algún día de , no me acuerdo.

un saludo
  #5 (permalink)  
Antiguo 19/04/2005, 02:34
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
Ya pero estamos en lo mismo, si alguien excribe en la barra de direccion otra URL o clicka en una web de favoritos, el evento no se ejecurtara y quedará conectado de por vida, no?

y ademas entonces para q sirve el Session_OnEnd?? Joeer q mierd! :P

De todas formas muchas gracias "trasgu"!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #6 (permalink)  
Antiguo 19/04/2005, 06:39
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 7 meses
Puntos: 18
creo recordar que ese evento (onunload) se ejecuta tanto si se cierra el navegador como si se cambia de web (esto mejor lo preguntas en el foro de javascript, que no estoy muy seguro y no quiero ponerme ahora con google)
  #7 (permalink)  
Antiguo 19/04/2005, 07:28
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
aaps ok merci!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #8 (permalink)  
Antiguo 20/04/2005, 07:25
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
Pero entonces para qué cony sirve Session_OnEnd ?
Porque no se ejecuta NUNCA!! :(
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #9 (permalink)  
Antiguo 20/04/2005, 07:33
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 7 meses
Puntos: 18
una vez hice pruebas dejando que acabara la sesión (la sesión acabó, ya que un response.redirect que tenía si session("admionistrador") no estaba activa funcionó), y session_onend no hizo lo que estaba puesto. lo curioso es que session_onstart sí que lo hace.
  #10 (permalink)  
Antiguo 20/04/2005, 10:43
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
Exacto, exacto! Session_onStart funciona, pero session_onend ni de coña!
Vaya tela!
Nada, tiro la toalla!
Porque no hay forma saber en un momento dado cuantas session("user") hay activas en el servidor y sus valores es imposible, verdad?

Quiero decir, si los users "pepito" "juanito" y "pedrito" estan logados y deambulando x la página, no se puede hacer ninguna especie de "for each session("user") activa en el servidor, devuelveme sus valores", verdad? Y que te devuelva así "pepito" "juanito" y "pedrito".

Eso estaría de p.m. pero creo q es imposible.

Como mucho se puede saber el nº de sessiones activas para un usuario, el mismo que ejecuta el código. Ejemplo: si yo le he logado como "Rents" y entro en "verSesiones.asp", cuyo codigo sería:

Código:
<%
Dim variable
for each  variable in Session.Contents
	Response.Write( variable & "=" & Session(variable)&"<br>")
next
Response.Write("Tienes " & Session.Contents.Count & " variables de sesión.<br>")
%>
La página te devolvería:

variable = user
Tienes 1 variables de sesion.

Pero claro, esto no sirve para nada en nuestro caso.
Q opinas?

(nota:en el ejemplo, la session de mi web q guarda el nombre de usuario se llama "user", como supongo q ya habreis entendido)
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #11 (permalink)  
Antiguo 20/04/2005, 12:09
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Hola!

Session_OnEnd si funciona, pero se ejecuta en dos puntos:

1. Cuando haces un Cerrar Session
2. Cuando el usuario se ha ido sin cerrar session, pero se ha cumplido el session.timeout

Para lo que quieres y que sea lo mas exacto posible, se usa algo como "UltimaActividad", donde cada cierto tiempo (1 minuto), se esta actualizando, asi tu dices:

Los usuarios que tienes una actividad dentro de los ultimos N minutos, entonces estan dentro de una sesion.

Esa es la forma es qe se maneja.
  #12 (permalink)  
Antiguo 20/04/2005, 15:36
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
yaya, en la teoria si, pero en la practica nunca acaba de funcionar bien!
seguire intentando!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
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 14:44.