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