habria que recordar que al aplicarle una variable de acceso como la que hiciste
session("Usuario")="si"
estas permitiendole al usuario ingresar mientras mantenga viva la conexion con el servidor
y si has puesto
session.Timeout=5 <<--- solo por ejemplo el tiempo(minutos)
si tu usuario, al pasado de 5 minutos no hace ninguna peticion a tu servidor, se eliminaran las variables, de hecho el
LOG OUT, que pudieramos implementar nosotros, no es otra cosa mas que una barrida manual(por decirlo asi), de ese proceso automatico
parte de logout, algun punto especifico donde acomodarlo
Código:
<form method="post" action="logout.asp">
<input type=submit value="Cerrar Session"
</form>
en la pagina logout.asp
Código:
<%
session.Contents.RemoveAll()
session.Abandon()
response.write "Salio del sistema"
response.Redirect("ingresar.asp")
%>
algo asi seria la salida, en caso de que le dieras un link como el pequeño formulario
entre tanto enlace que tamm(

), escribio anteriormente puse un Global.ASA, de esta forma, espero te sirva, y/o tambien para evaluacion de los muchachos que creo que pudieramos perfeccionarlo
Código PHP:
<object runat="Server" scope="Application"
id="rstActiveUsers" progid="ADODB.Recordset">
</object>
<script language="VBScript" runat="Server">
Sub Application_OnStart()
'Seleccionamos una constante de adovbs.inc
Const adInteger = 3
Const adVarChar = 200
Const adDate = 7
'enlistamos al usuario en memoria, agregando/definiendo los campos
rstActiveUsers.Fields.Append "id", adInteger
rstActiveUsers.Fields.Append "ip", adVarChar, 15
rstActiveUsers.Fields.Append "browser", adVarChar, 255
rstActiveUsers.Fields.Append "started", adDate
'Ahora abrir para usar el recordset, y agregar los datos de ese usuario
rstActiveUsers.Open
Application("NumVisitas") = 0
End Sub
Sub Session_OnStart()
'asignamos 20 minutos de session, esto puede variar
Session.Timeout = 20
'asignamos el tiempo de entrada, aunque segun las lecturas, algunas veces no tiene sentido realizar esto
Session("Start") = Now()
'preguntamos por logica que no sea el final del recordset
If Not rstActiveUsers.EOF Then rstActiveUsers.MoveLast
'agregamos los datos del visitante
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
'incremento el numero de visitantes, a nuestra web, solo por cuestiones estadisticas
Application.lock()
Application("NumVisitas") = Application("NumVisitas") + 1
Application.unlock()
End Sub
Sub Session_OnEnd()
'seleccionamos una constante
Const adAffectCurrent = 1
'iniciamos el recordset en el primer registro
rstActiveUsers.MoveFirst
'evaluamos la IDsession, del usuario en cuestion, se evalua con Clong, para que no haya conflictos con los tipos de variables
Do While Not rstActiveUsers.EOF
If CLng(rstActiveUsers.Fields("id").Value) = _
CLng(Session.SessionID) Then
rstActiveUsers.Delete adAffectCurrent
End If
rstActiveUsers.MoveNext
Loop
rstActiveUsers.Update
Application.lock()
Application("NumSesion") = Application("NumSesion") - 1
Application.unlock()
End Sub
Sub Application_OnEnd()
'y esta parte ocurre cuando se apaga el equipo, asi se limpiarian todos los recordsets y liberaria el espacio
rstActiveUsers.Close
End Sub
</script>
si te fijas, este codigo del Global.asa, hace exactamente lo mismo que te puse en logout.asp, la unica diferencia es que aki se elimina la visita mediante el ID session, que es "unico", dentro del servidor
suerte
Shilfild