从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:所以url应该是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
?>
相关文章:
- React中的数据集表示
- 从远程脚本获取用户IP
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- d3基于用户选择动态更新节点
- 同步调用,直到用户通过angular验证为访问者
- 使用javascript搜索具有用户输入的数组
- 如何使用jquery确定用户是否年满18岁
- Meteor-添加用户自定义字段的方法不起作用
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 跟踪用户点击Adsense广告的IP地址
- 使用javascript反复检查用户在facebook上的登录状态
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何检查用户在html5视频播放器中观看了完整的视频
- 一个密码测试程序,如果存在空格,它会提醒用户
- 从Javascript运行PHP文件来检查在线用户:表示未登录的用户是
- 将日期时间表示为远程用户的本地用户
- 在使用 Passport 注册后将表示用户的对象添加到数组中
- 检查用户是否在卸载前表示可以
- Google Maps API:哪些UI隐喻可用来表示用户在地图上选择位置
- 表示单页应用程序的用户配置状态(复选框、选择列表)的标准做法