2015-01-20 121 views
0

我有一个网站正在创建,我希望能够看到谁在线和谁不在。查看谁在线并不困难,当您登录时,数据库中的“在线”字段将从0更改为1。但问题在于脱机。我没做到这一点IF人注销的注销按钮,然后被转到页logout.php:关闭浏览器更新数据库关闭

<?php 
session_start(); 
$user_check=$_SESSION['login_user']; 

if(session_destroy()) 
{ 
$connection = mysql_connect("localhost", "root", ""); 
$db = mysql_select_db("masterrad", $connection); 

$query2 = mysql_query("update users set online = '0' where username = '$user_check'", $connection); 

header("Location: index.php"); 
} 
?> 

但如果他只是关闭网页什么都不会更改数据库中的,因为他从来没有去到logout.php页面。

所以我想知道是否有更好的方法来做到这一点?

+1

会话将自动删除自己,具体取决于您如何设置服务器的会话寿命。更新,那是另一个麻线球。谷歌“如果浏览器关闭,更新数据库”。你会发现很多结果。 – 2015-01-20 22:02:39

+0

这是一个可怕的想法,但是你可以有一个“心跳”系统,每隔x分钟发送一次ajax请求。如果您没有收到答案,请将其标记为离线。 – 2015-01-20 22:03:04

+0

是的,“心跳”__是一个可怕的想法。 – Kleskowy 2015-01-20 22:06:49

回答

2

在您认为是“在线”页面的每个页面上。
您可以使用@Alec Deitloffs'last_time_spotted'字段的想法,并基于该字段和您的时间段更新在线标志。没有克伦需要。

$query2 = mysql_query("update users set `online` = '0' where `online` = '1' AND (`last_time_spotted` < NOW() - INTERVAL 15 MINUTE), $connection); 
+0

这就是我想要的,好工作先生! – zmuci 2015-01-21 00:17:26

0

我相信大多数网站执行此操作的方式是在数据库中有一个“最后一次发现”字段。每次用户转到新页面时,该字段都将更新为当前时间。一个cron作业每10,15分钟执行一次(无论你想要什么),如果当前时间减去最后发现用户的时间大于你想要的阈值(即7分钟不活动),那么你会考虑它们离线。

当用户离开页面,关闭浏览器等等时,实际上让代码完全成功执行非常非常困难。不幸的是,这意味着需要采取其他方法,而且我的理解是这是最受欢迎的选择。或者至少,其中一个更简单的实施。

+0

我正在使用Windows,并为我所看到的Cron是Linux?还是我完全错过了这个观点? – zmuci 2015-01-20 22:20:55

+0

[这个问题](http://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron)讨论了建立定时/重复操作的替代方案。基本上,你只是想在服务器上建立一些东西来运行每个X单位的时间,以执行“不活跃用户”的数据库扫描并将它们转换为“离开的用户”。 – 2015-01-20 22:23:37