2016-03-31 11 views
0

セッションはユーザーがログに記録されているかどうかを確認しますが、ページを更新するとセッションテストが再び実行され、コードを実行してメンバのオンラインカウンタに毎回+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> 
+0

「私がページをリフレッシュすると、セッションテストは再び真実になります」とわかりません。もし彼らがログインしているのであれば真実ではないでしょうか?オンラインカウンターに1を追加するのはどこですか? – Barmar

+0

セッションはユーザーがログインしている間はtrueですが、セッションをチェックしてコードを再度実行すると、ページが更新されます。カウンタはユーザー名をデータベースに追加すると+1を追加します。$ sqlt2 = mysqli_query($ con、 active_members VALUES( ''。$ _ SESSION ['CurrentUser']。 "'、'"。$ time。 "')");に置き換えてください。 $ online_members = mysqli_num_rows($ sqlt7);毎回 –

+0

'active_members'のユーザ名カラムにユニークなキーがありますか? – Barmar

答えて

0

REPLACEが重複する行を挿入するのではなく、置き換えられますように、あなたはusername列に一意のインデックスを必要としています。

ALTER TABLE active_members ADD UNIQUE INDEX (username); 

それは、複数のユーザーが同じIPから来ることができることが可能ですが、あなたはおそらくも、active_guestsguest_ip列に一意のインデックスを必要としています。

+0

パーフェクト、優れたアドバイスと私は確かに実装されます。どうもありがとう –

関連する問題