簡體   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