繁体   English   中英

如何知道用户关闭浏览器的时间? 聊天应用程序

[英]How to know when user closes browser? Chat application

我有一个简单的聊天客户端设置,允许用户使用用户名登录并将他们写入的消息存储在sql数据库中。 每隔3秒,数据库就会打印出所有行。 所以它基本上是一个聊天客户端。

我想列出一个在线人员名单。 我怎样才能做到这一点? 当有人关闭浏览器时,我怎么能感觉到?

现在我正在拉用户名

$name = $_COOKIE["name"];

如果这个值是空的,我知道他们离开了。 但是一旦他们离开,现在知道他们的用户名是什么已经太晚了,所以我无法跟踪究竟是谁离开了。

想法? 我是php,javascript和html的新手,所以请记住:)

当有人关闭窗口时,很难向服务器发送最后一个请求,因为当用户想要关闭窗口时,浏览器通常不会等待JS执行完成(如onbeforeunload的情况)。

每当我遇到这样的情况时,我倾向于使用onbeforeunload发送最终请求(这种情况很快发生并且通常在浏览器窗口关闭之前完成),但也实现了超时功能。 超时功能将如下工作:

每次用户向服务器发送内容时,服务器都会将其识别为“仍在那里”。 同时,客户端设置一个45秒的计时器。 如果用户未在45秒内输入任何内容,则客户端会自行发送“静止”信号以保持连接状态。

现在,服务器应该每60秒执行一次removeInactive()例程(允许15秒慢连接边距,因此45/60秒),这将删除在过去60秒内未发送“仍然活着”信号的所有用户。

到目前为止,这个系统对我来说很好,你可以亲自尝试一下。

假设您每隔X秒使用AJAX来提取聊天消息,请使用该用户的当前时间戳更新您的用户表。 然后任何有时间戳的人说超过10秒,你就会知道他们已经离开了这个页面。

将在线用户放在一个名为'lastSeen'字段的表中,每隔几秒钟用ajax调用更新一次该字段。

ajax调用就像这样:

window.setInterval(function() {
    $.ajax({      
      url: _URL_ENGINE + "/updateLastSeen/?userid=" + userID,
      success: function(data) {

      }
    }); 
}, 2000); // 2000 means 2 seconds

现在要查询在线玩家列表你可以查询它们

select * from players WHERE lastSeen > DATE_SUB(NOW(), interval 40 SECOND) 

希望这可以帮助

使用onbeforeunload事件。

您可以在javascript中附加到onunload事件。 有关详细信息, 查看http://help.dottoro.com/ljflhicd.php

请参阅这些链接。 当然这是你的黑暗之光。

Link1: http ://www.daniweb.com/forums/thread252828.html

Link2: http //phpeasystep.com/phptu/9.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM