Выход из системы, когда пользователь закрывает вкладку

На моем сайте 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

Это выйдет из системы, когда браузер закроется. Обратите внимание, что пользователь останется в системе, если другие открытые вкладки или окна все еще открыты (браузер должен быть полностью закрыт).