javascript - 从Javascript运行PHP文件来检查在线用户: says users who are not logged in are

标签 javascript php mysql ajax session

我只是编写一个简单的管理面板,但希望登录的用户能够看到其他登录的用户。为此,我有一个 MySQL session 表,其中包含事件 session (已登录的用户)和一个 PHP 文件,该文件本质上将在所有页面上使用 JavaScript 每隔几秒更新每个事件用户的时间戳(因此只有在事件时才会更新)并将删除超过 30 秒前的 session )。这是代码:

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);");
}
?>

这工作正常, session 表每 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>

现在一切似乎都工作正常,除了随着时间的推移,其他不活跃且不在 session 表中的用户被显示为在线。我一生都看不出问题出在哪里。是用 javascript 还是 PHP 检查数据库?

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

如有任何帮助,我们将不胜感激。

最佳答案

看起来你的 JavaScript 正在获取缓存的响应。 禁用 PHP 文件的缓存。

在 php 中使用 header :

<?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
?>

关于javascript - 从Javascript运行PHP文件来检查在线用户: says users who are not logged in are,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609054/

相关文章:

php - 从 Mysql 数据库时间戳 Laravel 中仅选择本周的记录

javascript - div 内的滚动 div 出现在具有较高 z-index 的 div 上

javascript - 从之前的 if 语句中获取值

php - MySQL预制函数

php - 在 PHP MySQL 中存储和搜索 IPv6 范围

php - 如何在 PHP 中回显 mysql CURRENT_DATE()?

javascript - Ajax文件上传失败

javascript - 获取 JSON 流的内容

php - 页面选项卡使用什么 jQuery 插件?

要格式化的 SQL 列