измените статус на 0, когда пользователь закрывает браузер

I’m trying to build a simple system to indicate weather the user is online or not. но у меня есть одна проблема

когда пользователь закрывает кран или браузер, ajax-код не может обновить страницу, которая обрабатывает действия отслеживания пользователя.

мой php код, который изменяет значение на 0, если пользователь был неактивен в течение 2 минут

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 61)) {
    $query = "UPDATE  [ccc].[users] SET active = 0 WHERE ldap ='$ldap'";

    sqlsrv_query($conn,$query);
}

код jquery для проверки каждые 5 секунд

$(document).ready(function () {
/*check existing users*/
function session_checking() {
    $.post("../ajax-session.php", function (data) {

    });
}
setInterval(session_checking, 5000);
});

Как изменить статус на 0, если пользователь закрыл браузер ?

3 ответа

  1. Просто установите переменную, которая имеет данные сеанса в процессе входа в систему. Таким образом, вы можете проверить, активен ли пользователь или нет позже. как:

    $_SESSION["user"] = array(
       "s_name" => "user1@email.com", 
       "login_time" => time()
    );
    
    
    if($_SESSION["user"]["login_time"] < time()+2*60){ unset($_SESSION["user"]); }
    
    in application:
    if(isset($_SESSION["user"])){ ... }
    
  2. Насколько я знаю, нет никакого способа уведомить сервер, когда пользователь закрывает вкладку/Окно.

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

    UPDATE users SET is_online = 0 WHERE is_online = 1 AND last_activity <= [WHAT YOU NEED]
    

    Не забудьте создать соответствующие индексы в вашей таблице, учитывая, что вы будете часто выполнять вышеуказанный запрос.