当ASP会话结束时会运行global.asa中的Session_OnEnd方法,可以在这里删除 保存在Application("Users")数组中由于超时而被终止会话的用户。记录用户是由 于什么原因(超时还是显式退出)终止会话往往很有用处,下面的代码通过更新Users 表的TimedOut字段实现该功能: sub Session_OnEnd dim AppUsers dim aUser dim I dim j dim conn dim supportsCookies dim foundUser on error resume next supportsCookies=Session("SupportsCookies") Application.Lock AppUsers = Application("Users") foundUser = false for I = 0 to ubound(AppUsers) set aUser = AppUsers(I) if supportsCookies then if aUser("SessionID") = Session.SessionID then foundUser = true end if elseif dateAdd("n", Session.timeout, aUser("LastActivity")) < now() then foundUser = true end if if foundUser then set conn = server.createObject("ADODB.Connection") conn.ConnectionString=Session("ConnectionString") conn.ConnectionTimeout=Session("ConnectionTimeout") conn.mode=Session("Mode") conn.open conn.execute "UPDATE Users SET TimedOut=1 WHERE Users.Signon='" & aUser("Signon") & "'" conn.close set conn=nothing set aUser=nothing set AppUsers(I) = nothing for j = I to ubound(AppUsers) - 1 set AppUsers(j) = AppUsers(j + 1) next if ubound(AppUsers) > 0 then redim preserve AppUsers(ubound(AppUsers) - 1) else AppUsers = Array() end if exit for end if next Application("Users") = AppUsers Application.UnLock end sub