Как считать онлайн пользователей? - PullRequest
1 голос
/ 21 марта 2020

Я пытаюсь подсчитать пользователей, которые сейчас в сети, поэтому я сделал эти 2 запроса

При входе в систему

$id = $_SESSION['id'];
$up = mysqli_query($conn,"UPDATE user_account SET status= 1 WHERE id='$id'");

При выходе из системы

$id = $_SESSION['id'];
$up = mysqli_query($conn,"UPDATE user_account SET status= '0' WHERE id='$id'");

0 значение для автономного режима, в то время как 1 для онлайн, поэтому работает нормально, но я попробовал это в режиме браузера в режиме инкогнито Я вошел в учетную запись, затем закрыл режим браузера в режиме инкогнито и идентификатор пользователя еще существует и никогда не поворачиваются 0 - есть ли способ предотвратить это?

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Ваш сервер не может знать, что делает пользователь, если пользователь не сообщит серверу. По этой причине люди используют тайм-ауты сеансов. Если в течение определенного периода времени от пользователя не было никаких действий, вы предполагаете, что он ушел.

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

// Do this every time a user makes a request to server
$stmt = $conn->prepare('UPDATE user_account SET last_active=NOW() WHERE id=?');
$stmt->bind_param('s', $_SESSION['id']);
$stmt->execute();

// To fetch count:
$count_of_active_user = $conn->query('SELECT COUNT(*) FROM user_account WHERE last_active >= NOW() - INTERVAL 15 MINUTE')->fetch_row()[0];

Предупреждение: Вы широко открыты для SQL инъекций и должны использовать параметризованные подготовленные операторы вместо того, чтобы строить запросы вручную , Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким данным! Даже когда ваши запросы выполняются только доверенными пользователями, вы все равно рискуете испортить ваши данные . Побега недостаточно!

0 голосов
/ 21 марта 2020

Логически вы никогда не узнаете, закрыл ли пользователь браузер (будь то инкогнито или обычный режим), выключил компьютер или какие-либо другие возможности. Вы выключаете status только тогда, когда пользователи обычно выходят из системы с помощью кнопки на вашем сайте, и ни один из других способов не учитывается.

Один из способов - работать со всеми сеансами. Вы можете найти некоторую информацию здесь . Этот способ также не отключает status сразу.

Лучший способ:

Но я рекомендую вам использовать JavaScript на своем сайте, чтобы сообщить серверу что пользователь находится в сети, например, каждую минуту (или в любое время, когда пользователь взаимодействует с сайтом, что включает любой запрос к серверу). И установите значение DATETIME в базе данных для хранения последней активности каждого пользователя на сайте, чтобы вы могли установить ограничение и, например, сказать, что если это более 5 минут от последней активности пользователя, то пользователь находится в автономном режиме, иначе он / она онлайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...