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

时间:2010-12-13 09:30:34

标签: php javascript html chat

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

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

现在我将用户名拉为

$name = $_COOKIE["name"];

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

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

6 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

将在线用户放在一个名为'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) 

希望这会有所帮助

答案 3 :(得分:0)

使用onbeforeunload事件。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

参考这些链接。当然,这是你的黑暗之光。

<强>链接1: http://www.daniweb.com/forums/thread252828.html

<强>链路2: http://phpeasystep.com/phptu/9.html