怎样注销非正常离开的用户呢?

sniffer 2000-07-16 11:20:00
我用数组保存聊天用户信息,当用户点击“离开”后,用一段代码注销他,可是他要是直接关闭了浏览窗口,我该怎么注销他呢 ?
...全文
257 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
linyu 2000-07-21
  • 打赏
  • 举报
回复
[思路]
我原来有做一个聊天室是用一个定时刷新的帧来向数据库发送当前时间,如果超过最后刷新的时间比当时时间多于三分钟,就认为用户已经离开。
[例子]
Set RS = server.createobject("adodb.recordset")
sqltemp="select * from userlist"
set RS=cconn.execute(sqltemp)
do while not RS.eof
Userid=Rs("Userid")
LastTime=Rs("LastTime")
waitTime=DateDiff("s",lasttime,now)
If waitTime>1800 then
sqltemp="delete from userlist where userid="+cstr(userid)
Cconn.execute sqltemp
Application.lock
Application("number")=Application("number")-1
Application.unlock
End If
Rs.movenext
loop
zigzag 2000-07-20
  • 打赏
  • 举报
回复
在Session_OnEnd事件中删除用户。
Tyro 2000-07-20
  • 打赏
  • 举报
回复
window_onbeforeunload()消息可以处理用户离开了当前页面,但是当前页面进行刷新的话也会触发
sniffer 2000-07-20
  • 打赏
  • 举报
回复
聊天室只是一个子页面,关闭它并不一定关闭所有该站的浏览窗口啊?
snowhust 2000-07-19
  • 打赏
  • 举报
回复
hblinux的方法偶试过,虽然在简单的情况下可以实现,但是如果遇到了比较复杂的情况就不行了,有没有更好的方法呀?
华南虎哥 2000-07-19
  • 打赏
  • 举报
回复
我建议你使用global.asa文件来解决这个问题。只要灵活应用就行的。下面是一些关于它的说明:
————————————————————————————————————
   在 Global.asa 文件中声明的过程只能从一个或多个与 Application_OnStart、Application_OnEnd、Session_OnStart 和 Session_OnEnd 事件相关的脚本中调用。在基于 ASP 的应用程序的 ASP 页中,它们是不可用的。如果要在应用程序之间共享过程,可在单独的文件中声明这些过程,然后使用服务器端包容 (SSI) 语句将该文件包含在调用该过程的 ASP 程序中。通常,包含文件的扩展名应为 .inc。

   下面是一个很标准的 Global.asa 文件 :
< SCRIPT LANGUAGE="VBScript" RUNAT="Server">
'Session_OnStart 当客户首次运行 ASP 应用程序中的任何一个页面时运行
'Session_OnEnd 当一个客户的会话超时或退出应用程序时运行
'Application_OnStart 当任何客户首次访问该应用程序的首页时运行
'Application_OnEnd 当该站点的 WEB 服务器关闭时运行
'注意了,上面这四个过程就是我们的好帮手,解释这么详细就不用我再多说了。
< /SCRIPT>

< SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
...
End Sub
'=========================================================
SUB Application_OnEnd
...
End Sub
'=========================================================Sub Session_OnStart
Session.Timeout = 5
Application("visitors") = Application("visitors") + 1
Session("ID")=Session.SessionID
End Sub
'=========================================================Sub
session_OnEnd
Application("Visitors")=Application("visitors")-1
'在这块地方就是你注销它的绝佳位置,因为你已经知道了它的session("ID")
< /SCRIPT>
————————————————————————————————————
如果成功了,告诉一声,EMAIL:hblinux@163.net
wumou 2000-07-19
  • 打赏
  • 举报
回复
同意king的方法.同时可以结合remote script,刷新帧就不会闪烁了
cjlong 2000-07-19
  • 打赏
  • 举报
回复
1、hblinux的方法理论上可行,但实际中!!!!
2、re:VictorYu sesion.timeout 在我使用后,发现好象不太好用,
望唯鱼和szdino详细解释,最好贴个列子
3、无法我使用King的方法,可将该帧设成 1 \1 使最小
szdino 2000-07-18
  • 打赏
  • 举报
回复
我也做过,设定好session超时时间(在iis里),session里保留一个"isloginout"的
变量,主动loginout的时候,isloginout为true,
直接关brower,那么当超时时间到了,iis自动调用session onend
在session onend里,判断isloginout状态,如果没有注销,就执行loginout代码,比如
关闭数据库连接等等...



wzs 2000-07-16
  • 打赏
  • 举报
回复
你在发指定的时间内进行刷新然后读取当前在线的用户信息不就可以了!
VictorYu 2000-07-16
  • 打赏
  • 举报
回复
Session 变量有一个超时的设定,会自动清空.
w102272 2000-07-16
  • 打赏
  • 举报
回复
检测超时用户,KING的方法绝对正确。也没有别的方法可用。
King 2000-07-16
  • 打赏
  • 举报
回复
这个我做过,是自刷新的那种,当显示对话的那帧刷新的时候,都会向服务器发出请求,用自己的办法记录下这些请求,当一个客户超时没发出这个请求,就是断线了。

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧