2012-04-14 3 views
0

В моем приложении я сохраняю время выхода из системы пользователя. Это нормально работает, когда пользователь нажимает кнопку входа в систему, но мое требование - хранить время выхода из системы, даже если пользователь закрывает браузер. Если это невозможно, расскажите мне, как уничтожить сеанс, как только пользователь закроет окно.Как завершить сеанс, когда браузер закрывается

Любая помощь будет оценена по достоинству.

+0

Спасибо Mat для редактирования вопроса, он выглядит хорошо – Gouse

ответ

0

Согласно this answer, вы должны иметь возможность обрабатывать событие beforeunload, а затем выполнять выход AJAX.

непроверенная, но он должен работать так:

Ext.EventManager.on(window, 'beforeunload', function() { 
    Ext.Ajax.request({ 
    url: 'logout.json', 
    timeout: 60000 
    }); 
}); 
+0

спасибо за ответ может этот код работать для всех браузеров, таких как хром и mozilla – Gouse

+0

Он отлично работает Спасибо Очень много – Gouse

2

Раньше вы должны были сделать синхронную Ajax в обработчик событий. Не знаю, сохранилось ли это в современных браузерах. Если вы проходите асинхронно, обязательно проверяйте с реалистичной нагрузкой на клиента, чтобы вы не столкнулись с состоянием гонки, которое появляется только среди ваших пользователей.

Я бы предложил какой-то сердечный удар Ajax от клиента, скажем каждые пять минут. Если вы пропустите два таких вызова подряд, вы убьете сессию на стороне сервера. Это позаботится обо всех ситуациях, когда пользователь не выходит из системы (авария браузера, сбой ОС, сбой сети и т. Д.).

Потенциальные проблемы с действующими на разгрузочных событиях:

  • Что произойдет, если пользователь имеет свое приложение/сайт открыт я несколько вкладок и закрывает один из них? Вам необходимо сообщить пользователю, что будет выполнен перерыв между вкладками.
  • У браузеров есть история ограничений на то, что вы можете сделать при выгрузке, чтобы предотвратить появление всплывающих окон и бесконечных циклов, которые не позволяют пользователю закрыть браузер. Вы никогда не знаете, что произойдет в будущем. История здесь: http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript и через ссылку StackOverflow в ответе выше.
+0

Спасибо за ответ – Gouse

0

Это отвечает на последнюю часть вопроса. Автоматическое закрытие сеанса с закрытием браузера. Согласно Wikipedia: Если дата истечения срока действия или интервал действия не установлена ​​на время создания файла cookie, создается файл cookie сеанса. Веб-браузер обычно удаляет файлы cookie сеанса, когда пользователь закрывает браузер.

Задача заключается в создании файла cookie без истечения срока годности с использованием Ext-state-CookieProvider. Оставляя конфигурацию expires, это приведет к тому, что ExtJS по умолчанию будет работать до 7 дней. Проверьте это the source. Поэтому вам нужно создать печенье с явным expires в нуль, так как:

var cp = Ext.create('Ext.state.CookieProvider', { 
    expires: null 
}); 

Все значения куки будут удалены при закрытии браузера.

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