2009-02-10 84 views
7

背景:我使用C#Code-Behind创建了一个非常简单的聊天室样ASP.NET页面。当前用户/聊天消息显示在位于AJAX更新面板内的控件中,并使用定时器 - 它们每隔几秒从DB中提取信息。浏览器关闭时运行服务器端函数

我试图找到一种简单的方法来处理设置用户的状态为“离线”,当他们退出浏览器,而不是点击“注销”按钮。 IsOnline的“离线”状态目前仅为1 char(y/n)。

到目前为止,我已经看到window.onbeforeunload与Javascript,设置一个隐藏的表单变量与此事件上的函数 - >当然,麻烦是,我仍然必须测试这个隐藏的表单变量在我的代码中,在最后的服务器端数据库查询的后面,有效地将用户设置为离线。

我可能会完全模糊这个可能的简单问题!当然,我会欣赏任何完全不同的替代建议。

谢谢

回答

15

我怀疑你在吠叫错误的树。请记住,用户可能会突然失去互联网连接,浏览器可能会崩溃,或者使用大红色开关关闭计算机。有些情况下,服务器根本不会再次从浏览器中听到。

做到这一点的最好方法是用“死者的开关”。既然你说他们每隔几秒就从数据库中提取信息,那么利用这个机会来存储(在数据库中)上次从给定客户端听到的时间戳。

每分钟左右,在服务器上,执行查询以查找未过几分钟轮询的客户端,并将用户设置为离线...全部在服务器上。

+0

谢谢乔尔,你的建议很有意义。你会碰巧有一个好的起点去实现On-Server轮询来检查/离线设置用户 - 尽管它听起来很简单,但我从来没有真正做过类似的事情。 – 2009-02-10 04:04:36

2

Javascript不可靠,因为我可以通过放弃它来关闭浏览器。

更可靠的方法可能是定期从浏览器向服务器发送“我还活着”消息,并让服务器在停止接收这些消息时更改状态。

2

我只能同意乔尔在这里。有可靠的方式让你知道HTTP代理何时想要终止对话。

相关问题