Количество пользователей, вошедших / вышедших с истечением срока сеанса? - PullRequest
2 голосов
/ 23 августа 2011

На моем сервере запущен скрипт входа в php.Всякий раз, когда пользователь входит в систему, имя пользователя сохраняется в $_SESSION['username'], и в одной из моих таблиц БД существует поле с именем nonline, используемое для хранения количества пользователей, вошедших в систему.

Когда пользователь входит в систему,значение nonline увеличивается на единицу.И всякий раз, когда пользователь выходит из системы, он уменьшается на единицу.Довольно аккуратно до сих пор.: P

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

Можно ли каким-либо образом определить количество пользователей, действительно просматривающих мой веб-сайт в любой момент времени, так что его значение изменяется дажекогда пользователь закрывает свой браузер вместо того, чтобы нажимать кнопку выхода?Я не использую куки для входа.

Ответы [ 2 ]

1 голос
/ 23 августа 2011

К сожалению, нет.Любое решение, которое делает то, что вы хотите, включает браузер, запускающий HTTP-запрос, когда вкладка / окно закрыты, и этого не произойдет.

Лучшее, что вы можете сделать, - это иметь пользователей'время ожидания сеансов истекает через относительно короткое время (например, 15 минут) и выполняется агрессивная очистка сеансов с истекшим сроком действия для каждого сценария, который хочет знать фактическое количество активных пользователей.Имейте в виду, что это ухудшит производительность.

Если 15 минут все еще слишком много для вас и вы не можете уменьшить время жизни сеанса (потому что это будет раздражать ваших пользователей, если они вышли из системы после 10 секунд бездействия), вы можете заставить ваши страницы "пинговать" сервер, используя AJAX, чтобы поддерживать сеанс.Это позволит вам получать результаты почти в режиме реального времени, , но , что, вероятно, снизит вашу производительность, не будет работать для пользователей с отключенным JavaScript и подвержено сбоям в случае временных проблем с подключением.

1 голос
/ 23 августа 2011

Обычно это делается с помощью таблицы, которая отслеживает последнее действие или последнюю загрузку страницы. Число n_online (возможно, вы захотите добавить _, noline начинается с no, что на первый взгляд немного странно) будет числом, совершившим какую-либо форму действия в последнем n секунд - количество людей, которые активно вышли из системы.

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