繁体   English   中英

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

[英]Run PHP files from Javascript to check Online users: says users who are not logged in are

我仅在编写一个简单的管理面板,但想使已登录的用户能够查看其他已登录的用户。 为此,我有一个会话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的先前运行并将其移至其他用户吗? 检索在线/离线后是否需要关闭文件? 我试图确保文件的运行时间是随机的,以便不要同时运行。

任何帮助,将不胜感激。

似乎您的Javascript正在获得缓存的响应。 禁用对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
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM