Выход из системы, когда пользователь закрывает вкладку
На моем сайте Django я хочу выйти с сайта автоматически при закрытии вкладки или браузера. Я имею в виду, когда я закрываю сайт, закрывая вкладку, а не используя кнопку выхода из системы, после повторного ввода URL-адреса, я хочу видеть, что пользователь уже вышел из системы, чтобы заставить пользователя снова ввести имя пользователя и пароль.
Есть ли способ обработать закрытие вкладки в JQuery?
Спасибо заранее.
Изменить: onunload и onbeforeunload события вызывают выход из системы пользователя при повторной загрузке страницы.
Ответы
Ответ 1
Вы можете использовать события Javascript onunload
и onbeforeunload
. В этих случаях уничтожайте cookie сеанса для Django.
Эти события также запускаются, когда вы покидаете сайт по ссылке или кнопке браузера, поэтому будьте осторожны и дважды подумайте, действительно ли это то, что вы хотите.
Ответ 2
Добавьте код выхода в событие onunload.
window.onunload = function () {
//logout code here...
}
В JQuery вы можете использовать функцию .unload(). Помните, что у вас мало времени, поэтому вы можете отправить запрос Ajax, но результат может не дойти до клиента.
Другой трюк - открыть небольшое новое окно и обработать выход из него.
window.open("logout url","log out","height=10,width=10,location=no,menubar=no,status=no,titlebar=no,toolbar=no",true);
Если вы хотите отключить закрытие окна (или, по крайней мере, предупредить пользователя), вы можете использовать этот код:
window.onbeforeunload = function(event) {
//if you return anything but null, it will warn the user.
//optionally you can return a string which most browsers show to the user as the warning message.
return true;
}
Еще один трюк - держать pinging клиент каждые несколько секунд. Если ответ не возвращается, предположим, что пользователь закрыл окно, браузер разбился или возникла проблема с сетью, которая в любом случае закончила сеанс чата. На стороне клиента, если вы не получили этот пакет ping, вы можете предположить, что сетевое подключение или сервер имеют проблемы, и вы можете показать предупреждение выхода из системы (и, возможно, снова войти в систему для входа пользователя).
Ответ 3
Я просто столкнулся с этим. В вашем файле Django settings.py вы можете добавить флаг:
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
Это выйдет из системы, когда браузер закроется. Обратите внимание, что пользователь останется в системе, если другие открытые вкладки или окна все еще открыты (браузер должен быть полностью закрыт).