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

Php 如何知道用户何时关闭浏览器?聊天应用程序,php,javascript,html,chat,Php,Javascript,Html,Chat,我设置了一个简单的聊天客户端,允许用户使用用户名登录,并将他们编写的消息存储在sql数据库中。每隔3秒,数据库只打印所有行。所以它基本上是一个聊天客户端 我想保留一份在线用户名单。我该怎么做?当有人关闭浏览器时,我如何感觉到 现在我把用户名作为 $name = $_COOKIE["name"]; 如果这个值为空,我知道他们离开了。但一旦他们离开了,要知道他们的用户名就太晚了,所以我无法追踪到底是谁离开了 想法?我对php、javascript和html相当陌生,所以请记住:)使用onbefor

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

我想保留一份在线用户名单。我该怎么做?当有人关闭浏览器时,我如何感觉到

现在我把用户名作为

$name = $_COOKIE["name"];
如果这个值为空,我知道他们离开了。但一旦他们离开了,要知道他们的用户名就太晚了,所以我无法追踪到底是谁离开了


想法?我对php、javascript和html相当陌生,所以请记住:)

使用
onbeforeunload
事件

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

你可能会在javascript中附加到onunload事件。请查看完整的详细信息

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

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

每次用户向服务器发送某些内容时,服务器都会将其识别为“仍然存在”。同时,客户端设置一个计时器,例如45秒。如果用户在45秒钟内没有键入任何内容,客户端将自行发送“仍然活动”信号以保持连接

现在,服务器应该每60秒执行一次
removeInactive()
例程(允许15秒的慢速连接余量,因此为45/60秒),删除在过去60秒内没有发送“仍然活动”信号的任何用户


到目前为止,这个系统对我来说运行良好,您可以自己试用。

将在线用户放在一个表中,该表将有一个名为“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) 

希望这有助于参考这些链接。当然,这是你的黑暗之光

Link1:

Link2:

这不是一种可靠的方法,如果您在AJAX请求离开时发送该请求,那么它可能无法正常处理time@ehmad1合作的方式!竖起大拇指!