2013-10-24 4 views
0

Iam, используя ниже код перед выгрузкой, чтобы выйти из системы. У меня 3 уровня аутентификации, на странице аутентификации второго уровня я ввел этот код. Если пользователь является пользователем с 2 факторами аутентификации, пользователь остановится на странице, где я ввел код, и если пользователь закроет пользователя браузера, он выйдет из системы/сеанс будет прекращен. Но если пользователь проходит аутентификацию через 2 уровня, я вижу всплывающее окно, когда вы выходите из системы, и пользователь может войти в систему. то, что мне нужно: на закрытом мероприятии должно появиться всплывающее окно.Функция выхода из jquery

Я использовал window.onbeforeunload, window.onunload и все другие опции, он не работает для некоторых браузеров. Пожалуйста, предложите.

var timeoutID; 
$(window).bind("beforeunload", function(){  
    logout(); 
    timeoutID = window.setTimeout(displayMessage(),500); 
}); 

function logout() { 
    window.location.href = "logout url"; 
} 

function displayMessage(){ 
    window.alert("You are loggedout"); 
} 
+0

Вы не можете перенаправить пользователя на событие 'beforeunload'. Отправьте не-async-запрос ajax скрипту, который выйдет из системы вместо этого. Еще лучше использовать сеансовые куки. – SeinopSys

ответ

0
timeoutID = window.setTimeout(displayMessage(),500); 

должно быть:

timeoutID = window.setTimeout(displayMessage,500); 

Первый аргумент setTimeout должен быть функцией. Вы вызываете функцию вместо передачи самой функции. Вот почему появляется предупреждение.

Однако из-за ограничений на то, что вы можете сделать в обработчике beforeunload, это все равно будет работать. Это просто означает показать вам правильный синтаксис для создания функций тайм-аута.

+0

Вы не можете использовать таймер в beforeunload, потому что страница будет закрыта до ее запуска. – jfriend00

+0

@ jfriend00 Спасибо. Я обновил ответ, чтобы дать понять, что я просто помогаю ему понять правильный синтаксис 'setTimeout', а не то, что он действительно решит свою конечную проблему. – Barmar

+0

Не повезло. Когда я закрываю окно сейчас, он не показывает всплывающее окно. Показывая это всплывающее окно, у меня будет время завершить сеанс на бэкэнд. Поэтому по этой причине я добавил setTimeout. Любое другое альтернативное решение? – user2914481

0

Две вещи, которые вы не можете сделать в обработчиках beforeunload являются:

  1. переадресовать пользователя на другую страницу (не допускается в браузере).
  2. Установите таймер, который будет запущен в будущем (страница уже закрыта, поэтому нет будущего времени).

Итак, ни одна из вещей, которые вы пытаетесь сделать в обработчике beforeunload, не будет работать. (FYI, есть другие ограничения в beforeunload, например, вы не можете использовать prompt() или alert() и т. Д., Но это те, что вы делали).

Вы не говорите, как отслеживается логин/выход из системы, поэтому нам трудно точно знать, что предложить. Файл cookie сеанса истекает автоматически, когда браузер закрыт. Регулярный файл cookie можно легко очистить в вашем обработчике beforeunload.

Смежные вопросы