Session_End не запускается примерно до 30 минут после того, как пользователь уходит. Я тоже встретил беду сессии в ASP.NET.
Если вы вызываете Session.Abandon, вы можете запустить Session_end. Но это не решит вашу проблему, если пользователь покидает ваш сайт или закрывает браузер.
Вы можете возможно использовать событие javascript и выполнить вызов веб-службы, чтобы завершить сеанс, когда они покидают страницу. Эта логика аналогична попытке запретить пользователям выходить из системы перед сохранением работы.
Проблема с этим? Это истечет сеанс КАЖДЫЙ переход страницы.
window.onbeforeunload = endSession;
function endSession() {
//end session here through some kind of call back to the server
}
Ранее я уже делал одну страницу, где некоторые функции заставляли бы всплывающее окно удерживать пользователя от ухода, в то время как другие (например, отправка назад) не вызывали событие. В итоге мне пришлось установить переменную при загрузке страницы, а затем изменить ее при взаимодействии с определенными элементами управления или ссылками.
var endUserSession = true;
window.onbeforeunload = endSession;
function endSession() {
if(endUserSession) {
//end session here through some kind of call back to the server
}
}
Хотя это очень инвазивная реализация и требует большой работы и интеграции для реализации всего сайта, она может работать, хотя потребуется много времени, чтобы обратная передача не вызывала окончание сеанса.
По моему личному опыту, лучше просто позволить сеансу иметь дело с самим собой, а не беспокоиться о том, когда он истекает или не истекает. Слишком много недель было потрачено на решение проблем вокруг сессии. IIS должен справиться с этим за вас, и вы можете перейти к рабочему процессу и изменить частоту перезапуска WP (и очистки сеанса).
Если проблема здесь связана с доступными системными ресурсами: т. Е. Сайт просто занимает много памяти и сеанс дампа не подходит, вы можете реализовать Sql Server State Server, а затем перезапустить рабочий процесс так, как вам нужно. .
Как реализовать SQL Server State Server