7

背景:我正在使用 C# Code-Behind 创建一个非常简单的类似聊天室的 ASP.NET 页面。当前用户/聊天消息显示在位于 AJAX 更新面板内的控件中,并使用计时器 - 他们每隔几秒钟从数据库中提取信息。

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

到目前为止,我已经用 Javascript 研究了 window.onbeforeunload,在这个事件上设置了一个带有函数的隐藏表单变量 -> 当然问题是,我仍然需要在我的代码隐藏中测试这个隐藏的表单变量。最终的服务器端数据库查询,有效地将用户设置为离线。

我可能完全混淆了这个可能很简单的问题!当然,我会很感激任何完全不同的替代建议。

谢谢

4

3 回答 3

15

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

最好的方法是使用“死人开关”。既然您说他们每隔几秒钟就从数据库中提取信息,请利用这个机会存储(在数据库中)您最后一次从给定客户端听到的时间戳。

每隔一分钟左右,在服务器上进行一次查询以查找几分钟没有轮询的客户端,并将用户设置为离线......全部在服务器上。

于 2009-02-10T03:54:34.027 回答
2

Javascript 不可靠,因为我可以通过异常关闭浏览器。

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

于 2009-02-10T03:55:00.563 回答
2

我只能同意乔尔的观点。没有可靠方法让您知道 HTTP 代理何时想要终止对话。

于 2009-02-10T04:00:11.237 回答