セッションはユーザーがログに記録されているかどうかを確認しますが、ページを更新するとセッションテストが再び実行され、コードを実行してメンバのオンラインカウンタに毎回+1を加えます。以下のようにセッションが真であるかどうかを確認するコードを表示したいが、ページをリフレッシュしたり、別のページに移動したりしてはいけない。SESSIONカウンターをインクリメントするループ
PS私のコードは安全ではありません私のコードは実際の環境ではありません。セキュリティは後でSQLインジェクションを防ぐために適用されます。
include('..\db.php');
$con = mysqli_connect($dbsrvname, $dbusername, $dbpassword, $dbname);
$guest_timeout = time() -1 * 60;
$member_timeout = time() -2 * 60;
$guest_ip = $_SERVER['REMOTE_ADDR'];
$time = time()
// This session check adds +1 to my member online counter when page is reloaded
if(isset($_SESSION['CurrentUser'])){
//if user is logged
$sqlt = mysqli_query($con,"DELETE * FROM active_guests WHERE guest_ip='".$guest_ip."'");
$sqlt2 = mysqli_query($con,"REPLACE INTO active_members VALUES ('".$_SESSION['CurrentUser']."','".$time."')");
}else{
//if user not logged
$sqlt3 = mysqli_query($con,"REPLACE INTO active_guest (guest_ip,time_visited)VALUES ('".$guest_ip."','".$time."')");
}
$sqlt4 = mysqli_query($con,"DELETE * FROM active_guest WHERE time_visited < ".$guest_timeout);
$sqlt5 = mysqli_query($con,"DELETE * FROM active_members WHERE time_visited < ".$member_timeout);
$sqlt6 = mysqli_query($con,"SELECT guest_ip FROM active_guests");
$online_guests = mysqli_num_rows($sqlt6);
$sqlt7 = mysqli_query($con,"SELECT username FROM active_members");
$online_members = mysqli_num_rows($sqlt7);
?>
<div class="container">
<p>online Guests : <?php echo $online_guests ; ?></p>
<p>online Members : <?php echo $online_members ; ?></p>
</div>
「私がページをリフレッシュすると、セッションテストは再び真実になります」とわかりません。もし彼らがログインしているのであれば真実ではないでしょうか?オンラインカウンターに1を追加するのはどこですか? – Barmar
セッションはユーザーがログインしている間はtrueですが、セッションをチェックしてコードを再度実行すると、ページが更新されます。カウンタはユーザー名をデータベースに追加すると+1を追加します。$ sqlt2 = mysqli_query($ con、 active_members VALUES( ''。$ _ SESSION ['CurrentUser']。 "'、'"。$ time。 "')");に置き換えてください。 $ online_members = mysqli_num_rows($ sqlt7);毎回 –
'active_members'のユーザ名カラムにユニークなキーがありますか? – Barmar