![](/img/trans.png)
[英]How to delete a record from mysql database when the user closes the browser
[英]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.