Есть несколько способов сделать это.
Сеансы в БД - это один из способов. Это может быть использовано для определения количества анонимных пользователей на вашем сайте.
Другой способ выполнить задачу, которую вы ищете, - пометить пользователя в вашей пользовательской таблице в новом поле, скажем, «logged_in».
Когда метод входа в систему выполняется, флаг изменяется соответственно, аналогично методу выхода из системы. Затем вы запускаете запрос SELECT каждый раз, когда пользователь пытается войти в систему, чтобы проверить, сколько пользователей в данный момент вошли в систему, и действовать соответственно.
Лучшим способом было бы вести подсчет в БД общего количества зарегистрированных пользователей, складывая и вычитая, в зависимости от того, какие методы "login" или "logout" выполняются. Таким образом, вы не будете знать, какие конкретные пользователи вошли в данный момент, но у вас будет по крайней мере общее количество, которое вам нужно. Этот метод лучше, потому что вам не нужно будет выполнять запрос SELECT для всей пользовательской таблицы, вместо этого вы можете получить значение одного конкретного поля из вашей БД, что повысит производительность. К сожалению, если они не выходят из системы каждый раз, этот метод бесполезен, если только вы не сохраните их время входа и не выйдете через определенный промежуток времени.
Чтобы попытаться решить проблему, заключающуюся в том, что пользователь может закрыть браузер, а не «выходить из системы», вы можете в любом случае сохранить сеансы, используя комбинацию структуры БД, предложенной мной выше.