2016-03-31 4 views
0

Моя сессия проверяет, зарегистрирован ли пользователь, однако, когда я обновляю страницу, сеансовый тест снова запускается и начинает выполнять код, который затем каждый раз добавляет +1 к счетчикам онлайн-участников. Я бы хотел, чтобы мой код проверял, является ли сеанс истинным, как показано ниже, но нет, если я обновляю страницу или перехожу на другую страницу. (Только один раз для входа в систему). Как это возможно?SESSION Loop, который увеличивает счетчик

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

Сессия верна, поскольку пользователь вошел в систему, однако, когда я обновляю страницу, сессия проверяет и выполняет код снова, счетчик добавляет +1, когда он добавляет имя пользователя в базу данных, $ sqlt2 = mysqli_query ($ con, " REPLACE INTO active_members VALUES ('". $ _ SESSION [' CurrentUser ']."', '". $ Time."') "); $ online_members = mysqli_num_rows ($ sqlt7); каждый раз –

+0

Есть ли уникальный ключ в столбце имени пользователя 'active_members'? – Barmar

ответ

0

Вам нужен уникальный индекс username колонки так, что REPLACE заменит вместо вставки повторяющиеся строки.

ALTER TABLE active_members ADD UNIQUE INDEX (username); 

Вы, вероятно, также необходим уникальный индекс на guest_ip колонке active_guests, хотя вполне возможно, что несколько пользователей могут быть из того же IP.

+0

Идеальный, отличный совет, и я, конечно, буду реализовывать. Большое спасибо –

Смежные вопросы