【问题标题】:Running server-side function as browser closes在浏览器关闭时运行服务器端功能
【发布时间】:2009-02-10 03:48:21
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: c# asp.net onbeforeunload


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢乔尔,你的建议很有意义。您是否会碰巧建议一个好的起点来实施该服务器上的民意调查以检查/设置用户离线 - 尽管听起来很简单,但我从未真正做过这样的事情。
    • 可能值得另一个问题...“如何在 asp.net 服务器上运行定期进程”...
    • 谢谢!那我很快就会写出来 - 欣赏它。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-02-22
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2015-03-29
        • 2012-09-25
        • 1970-01-01
        • 2011-10-15
        • 1970-01-01
        相关资源
        最近更新 更多