Время простоя, выход из системы и истечение времени сеанса, как заставить это работать с Symfony? - PullRequest
0 голосов
/ 11 апреля 2019

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

Я использую Symfony2.4, и фактический выход из системы включает обработчик, потому что мне нужно знать, зарегистрирован ли человек на другом компьютере.Я не могу просто использовать истечение сеанса, потому что этот обработчик не будет выполняться, и приложение все равно покажет пользователю, что оно зарегистрировано.

Я использую этот код и работает действительно хорошо !!

<script>
        var unloaded = false;
        $(window).on('beforeunload', unload);
        $(window).on('unload', unload);
        function unload(){
            if(!unloaded){
                $('body').css('cursor','wait');
                $.ajax({
                    type: 'get',
                    async: false,
                    url: "{{ logout_url('main') }}",
                    success:function(){
                        unloaded = true;
                        $('body').css('cursor','default');
                    },
                    timeout: 50
                });
            }
        }
    </script>

Дело в том, что когда пользователь пытается перейти по какой-либо ссылке на веб-сайте, этот код выполняется, и ему необходимо снова войти в систему.

Что можно сделать, чтобы избежать запуска этого кода, просто перейдя к другомуссылка или что еще можно сделать, чтобы получить похожие результаты?

1 Ответ

0 голосов
/ 12 апреля 2019

Это больше вопрос Javascript, но хорошо.

Как насчет обертывания всех ваших внешних ссылок javascript, который устанавливает флаг, который отключает вашу unload() функцию?Это не очень разумно, хотя, но должно работать.

Нечто подобное (не проверено):

$('a').click(function(){
    // set the flag
    myFlag = true;
    return true;
}):

и в вашей разгрузке:

 function unload(){
   if (myFlag) {
     myFlag = false
     return
  }
  // the rest here
}

EDIT:

Если вы хотите отправить запрос при выгрузке страницы, лучше использовать navigator.sendBeacon (), поскольку данные передаются асинхронно на веб-сервер, когда пользовательский агент имеет возможностьсделайте это, не задерживая выгрузку и не влияя на производительность следующей навигации.См https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

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