Problema con session.timeout

Buenas experto tengo un problemita espero que me ayudes te cuento: estoy haciendo una intranet para varios niveles de usuario, en la tabla de usuario coloque un campo estado la cual se inicializa en 0 y cuando entra se pone en 1 hasta ahí todo bien,, también guardo en otra tabla el Usuario, Ip, Entrada, Salida. El usuario cierra la sesión y lo mando a la pag logout y actualizo el estado a 1 y guardo la salido ahí todo funciona bien pero cuando le estoy buscando la falla encuentro que si el usuario se va de la página sin cerrar sesión o cierra el navegador,, no puedo actualizar el estado y la salida... Coloque para probar el tiempo de session en 1minuto y me voy de la página y no lo hace lo que no quiero es usar el global.asa sera que me puedes ayudar gracias...

1 Respuesta

Respuesta
1
¿Por que no quieres usar el global. Asa? La utilidad de este modulo es precisamente esa, la de ejecutar una función cuando el usuario sale de nuestra aplicación (Session. OnEnd).
Sin usar esta función se me ocurre solo una opción, se trata de ejecutar el método onunload de la etiqueta <Body> y así controlamos la posibilidad de que el usuario cierre el navegador, en esta función haríamos un window.open ("paginalogout.asp").
El problema es que hay que hacer esto en todas las páginas de la aplicación.
No lo quiero usar porque cuando lo uso me sucede lo siguiente se logea un usuario abro otra ventana del navegador para logear otro usuario entra cuando vuelvo al primero y actualizo se me convierte en el 2 usuario que entro, no se si lo estoy usando mal ya que nunca he usado el global.asa porque tienes razón con el global.asa colocaría que al finalizar ejecute el update del estado la cual he probado y no hace nada me podrías explicar como trabajo bd en el global. ¿Asa? Gracias... voy a probar con el unload a ver que pasa
Trabajar con el global. Asa es como trabajar en ASP en una página cualquiera, funciona igual, solo que todo el código ser debe incluir en una de las siguientes funciones:
-Session_OnStart Se ejecuta la primera vez que un usuario abre cualquier página de la aplicación
-Session_OnEnd Se ejecuta cuando finaliza el tiempo de espera de la sesión de un usuario o éste sale de la aplicación
-Application_OnStart Se ejecuta una vez cuando un usuario abre por primera vez la primera página de la aplicación
-Application_OnEnd Se ejecuta una vez cuando se apaga el servidor Web.
A ti te interesan las dos primeras, y sobre todo Session_OnEnd, aquí es donde tienes que hacer el logout para cada usuario.
Me comentas que se te mezclan los usuarios y uno se te convierte en otro, no entiendo muy bien que me quieres decir con esto, pero si quieres identificar cada usuario que entra en la aplicación existe una propiedad llamada Session. SessionID que te devuelve un número único para cada usuario que entra en la aplicación.
Exactamente ya puse códigos en Session_OnEnd pero no me hace nada no actualiza el estado en la bd,,, si te cuento que estoy trabajando localmente y abro 2 ventanas del navegador y logeo un usuario luego logeo otro me voy al primero y actualizo y toma el valor del otro.
Coloque esto en el global.asa de un ejemplo que probé y funciona pero a mi no
Sub Application_OnStart
Application("connString") = "Driver={SQLServer};Server=Uln;Database=Intranet;Uid=;Pwd=;"
End Sub
Sub Session_OnEnd()
set con = Server.CreateObject ("ADODB.Connection")
con.Open Application("connString")
SQL="update administrativo set Estado='" & 0 & "' where Usuario='" & session("Usuario") & "'"
con.Execute(SQL)
con.Close
set con=nothing
session.Abandon
end sub
Y no hace nada no se que estoy haciendo mal gracias-..
Ok gracias
Yo tampoco se que estas haciendo mal, siento no servirte de ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas