从Javascript运行PHP文件以检查在线用户:表示未登录的用户是

时间:2013-12-16 10:51:19

标签: javascript php mysql ajax session

我只是编写一个简单的管理面板,但希望启用已登录的用户以查看其他登录用户。为此,我有一个会话MySQL表,其中包含活动会话(登录用户)和一个PHP文件,它基本上每隔几秒钟使用所有页面上的JavaScript更新每个活动用户的时间戳(因此它只会在活动时更新并将删除大于30秒前的会话。这是代码:

使用Javascript:

<script type="text/javascript">
function track() {
var url = "tracking.php?username=<?PHP echo $_SESSION['username']; ?>";
xmlReq=new XMLHttpRequest();
xmlReq.open("GET",url,true);
xmlReq.send();
}
setInterval(function(){track();}, 3000);
</script>

PHP:所以网址是tracking.php?username = john.doe

<?PHP
$username=$_GET['username'];
if($username){
$result = mysql_query("SELECT * FROM sessions WHERE username='$username'");

if(mysql_fetch_array($result) !== false){
mysql_query("UPDATE sessions SET time=now() WHERE username='$username'");
} else {
mysql_query("INSERT INTO `sessions` (`username`, `time`) VALUES ('$username',now())") or die (mysql_error());
}
mysql_query("DELETE FROM sessions WHERE time < (now() - 30);");
}
?>

这很好用,会话表每3秒更新一次。问题是当我来显示当前登录的用户时。我有一个check.php文件,其中包含以下内容:

<?PHP
$username=$_GET['username'];
$result=mysql_query("SELECT * FROM sessions WHERE username = '$username'");
$num=mysql_num_rows($result);
if($num>0){
echo "Online";
} else {
echo "Offline";
}
?>

和Javascript功能:

<script type="text/javascript">
function checklogin(username) {
var element = "status";
newusername = username.substring(0, username.indexOf('.'));
newelement = element + newusername;
$.ajax({
url: ‘check.php?username='+username,
type: "GET",
dataType: "html",
success: function(data)
{
if(data === "Online")
{
document.getElementById(newelement).innerHTML='<div class="online"></div>';
}
}
});
}
</script>

哪会改变用户的div:

<?PHP
$sql=mysql_query("SELECT * FROM tbl_admin_users order by id ASC");
$num=mysql_num_rows($sql);
$i=0;
while($num>$i){
$id=mysql_result($sql,$i,"id");
$username=mysql_result($sql,$i,"username");
$first_name=mysql_result($sql,$i,"firstname");
$last_name=mysql_result($sql,$i,"lastname");
$jobtitle=mysql_result($sql,$i,"jobtitle");
$email=mysql_result($sql,$i,"email");
$phone=mysql_result($sql,$i,"phone_office");
$spanar=explode(".",$username);
$spanid=$spanar[0];
?>

<tr>
<td class="center" width="40px">
<script type="text/javascript">
setInterval(function(){checklogin('<?PHP echo $username; ?>');}, <?PHP echo rand(2000,4000); ?>);
</script>
<span id="status<?PHP echo $spanid?>"></span>
</td>

现在一切似乎都很好,除了时间以外,其他非活动且不在会话表中的用户都显示为在线。对于我的生活,我无法看到问题所在。是用javascript还是PHP检查数据库?

一旦运行,该文件是否可以在后台运行在服务器上,并且它会在上次运行check.php并将其移到另一个用户上?检索在线/离线后是否需要关闭文件?我试图确保文件运行的时间是随机的,以便不同时运行。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

似乎您的Javascripts正在获得缓存响应。 禁用PHP文件的缓存。

在php中使用标题:

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>