Session.Abandon(), похоже, ничего не делает. Вы ожидали, что событие Session_end будет запущено при вызове Session.Abandon().
Как вы программно завершаете сеанс в asp.net, когда Session.Abandon() не работает?
Ответ 1
Это наиболее вероятно, потому что ваш SessionMode
не InProc
(единственный, который может обнаружить, когда заканчивается сеанс).
Цитата из MSDN:
События сеанса
ASP.NET предоставляет два события, которые помогают вы управляете сеансами пользователя. Событие Session_OnStart возникает, когда начинается новая сессия, а Событие Session_OnEnd возникает, когда сессия прекращается или истекает. События сеанса указаны в Файл Global.asax для ASP.NET приложение.
Событие Session_OnEnd не является поддерживается, если свойство режима сеанса установлено значение, отличное от InProc, который является режимом по умолчанию.
Ответ 2
Session.Abandon() - это способ завершить сеанс. В чем проблема, с которой вы сталкиваетесь?
Если связана его кнопка "Назад", это совершенно другая проблема (страница не возвращает на Назад, вместо этого она запускает один из кеша клиента, так что никакие методы на стороне сервера не будут выполняться).
Кроме того, Session_End является проблематичным. Он будет запускаться только на Session.Abandon() при использовании сеансов InProc, поэтому, если вы используете другой режим сеанса, на него нельзя положиться. В противном случае Session_End будет срабатывать при достижении SessionTimeout (по умолчанию я полагаю, 20 минут, настроен в Web.Config).
Ответ 3
Вы пытались использовать следующее?
System.Web.Security.FormsAuthentication.SignOut();
Это очистит файлы cookie, используемые для проверки подлинности формы, хотя может и не быть тем, что вы ищете.
Возможно, вам придется использовать это в дополнение к Session.Abandon()
Ответ 4
Вот статья, в которой говорится о том, когда вызывается конец сеанса:
http://www.highoncoding.com/Articles/108_When_is_Session_End_Called__.aspx
Ответ 5
Если сеансы, похоже, сохраняются, вы можете попробовать (в web.config):
<sessionState regenerateExpiredSessionId="true">
Ответ 6
Это зависит, если у вас есть приложение на 2 серверах: 1 WebApplication, у которого есть свой сеанс, и второе приложение WS или WCF, которое также имеет свой собственный сеанс, как это было в приложении, на котором я работал один раз. Если у вас есть этот случай, сеанс должен быть завершен во второй точке, а первый - тайм-аут. По крайней мере, вам нужно будет использовать токен и сохранить список токенов активных сеансов. Возможно, это ваше дело. удачи. PS. Чтобы убить сеанс, выполните его на втором сервере.