浏览器关闭时运行服务器端功能

时间:2009-02-10 03:48:21

标签: c# asp.net onbeforeunload

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

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

到目前为止,我已经使用Javascript查看了window.onbeforeunload,设置了一个隐藏的表单变量,其中包含此事件的函数 - >当然麻烦的是,我仍然需要在我的Code-Behind某处测试这个隐藏的表单变量来执行最终的服务器端数据库查询,从而有效地将用户设置为脱机。

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

由于

3 个答案:

答案 0 :(得分:15)

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

这样做的最好方法是“死人的开关”。由于您说它们每隔几秒就从数据库中提取信息,因此利用该机会存储(在数据库中)上次您从给定客户端收到的时间戳。

每分钟左右,在服务器上进行查询,找到几分钟未轮询的客户端,并将用户设置为脱机...全部在服务器上。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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