如何在关闭浏览器时处理用户在线状态?

时间:2011-06-17 12:41:47

标签: php

我正在通过将“is_online”字段设置为1来跟踪用户在线状态。现在用户登录该站点并关闭他/她的系统或在他/她登录时断电。 数据库'is_login'中的值为'1',表示他仍在使用该站点。

所以我必须做一些逻辑来将该值更改为'0'。

如何使用PHP处理这种情况?

5 个答案:

答案 0 :(得分:10)

正常的解决方案是在表中存储一个时间戳,每次用户执行操作时都会更新。具有最近时间戳(例如,五分钟)的用户显示为已登录,其他人都已注销。

甚至不需要在每个页面加载时更新它。在会话中保留时间戳和上次更新时间,并且仅在数据库标志即将到期时更新表。

答案 1 :(得分:3)

存储自上次活动以来的时间。当它超过指定时间时 - 将其视为离线。您应该将is_online替换为DateTime字段,并在每次登录用户访问网站时更新它。

在您要选择所有在线用户的地方,而不是:

SELECT * FROM users WHERE is_online = 1

您可以使用:

SELECT * FROM users WHERE is_online >= DATE_SUB(NOW(), INTERVAL 5 MINUTE)

答案 2 :(得分:2)

你不能。一旦页面传递,HTTP就会关闭连接。仅在服务器端,您可以做的就是检查用户是否在一定时间内请求了页面。

JavaScript可能是你的朋友。您可以使用它来创建对PHP脚本的ping,然后更新上一个请求时间戳。一旦没有更多的ping,用户就会消失,你就知道了。

如果您在使用javaScript时遇到问题,那么最好从这里开始:http://www.w3schools.com/JS/

您可能希望专注于AJAX和HTTP请求。

铜 罗马

答案 3 :(得分:1)

您可以使用jquery每次X更新您的网站,因此每10秒执行一次函数,如下代码所示:

function updateTheBBDD(){
    ... calling mysql_connect -> mysql_insert -> mysql_close
}

setInterval("updateTheBBDD()",10000);

此外,在绘制用户状态监视器而不是咨询BD时:

1->green
0->red

你应该:

actual - time > 10  ---> red
actual - time <= 10 ---> green

答案 4 :(得分:0)

由于网络无状态,因此无法确切知道用​​户何时离开您的网站。因此,您无法真正触发任何代码来更改上述值。

正如其他人所说,必须存储自上次活动以来的时间,以便大致了解用户最后一次实际使用该网站的时间。

HTH:)