我正在通过将“is_online”字段设置为1来跟踪用户在线状态。现在用户登录该站点并关闭他/她的系统或在他/她登录时断电。 数据库'is_login'中的值为'1',表示他仍在使用该站点。
所以我必须做一些逻辑来将该值更改为'0'。
如何使用PHP处理这种情况?
答案 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)
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:)