Как вы программно завершаете сеанс в asp.net, когда Session.Abandon() не работает?

Session.Abandon(), похоже, ничего не делает. Вы ожидаете, что событие Session_end сработает при вызове Session.Abandon().


person Slim    schedule 12.05.2009    source источник


Ответы (5)


Скорее всего, это связано с тем, что ваш SessionMode не InProc (единственный, который может определить завершение сеанса).

Цитата из MSDN:

События сеанса

ASP.NET предоставляет два события, которые помогают управлять сеансами пользователей. Событие Session_OnStart возникает, когда начинается новый сеанс, а событие Session_OnEnd возникает, когда сеанс прекращается или срок его действия истекает. События сеанса указываются в файле Global.asax для приложения ASP.NET.

Событие Session_OnEnd не поддерживается, если для свойства режима сеанса установлено значение, отличное от InProc, которое является режимом по умолчанию.

person Noldorin    schedule 12.05.2009
comment
@Syaz: это полностью объясняет причину, по которой событие Session.OnEnd не возникает! Более того, ОП принял это, поэтому я не думаю, что вы можете обоснованно утверждать, что ... - person Noldorin; 15.09.2009
comment
@Noldorin Я изменил заголовок, чтобы он соответствовал реальному вопросу. - person TheSoftwareJedi; 10.02.2016

Session.Abandon() — это способ завершения сеанса. С какой проблемой вы столкнулись?

Если его кнопка «Назад» связана, это совершенно другая проблема (страница не выполняет обратную передачу на «Назад», вместо этого она запускает ее из кеша на стороне клиента, поэтому никакие методы на стороне сервера не будут выполняться).

Кроме того, Session_End проблематичен. Он будет срабатывать только в Session.Abandon() при использовании сеансов InProc, поэтому, если вы используете другой режим сеанса, на него нельзя полагаться. В противном случае Session_End сработает, когда будет достигнуто значение SessionTimeout (по умолчанию это 20 минут, я полагаю, настроено в Web.Config).

person Serapth    schedule 12.05.2009

Вы пробовали использовать следующее?

System.Web.Security.FormsAuthentication.SignOut();

Это удалит файлы cookie, используемые для проверки подлинности формы, хотя это может быть не то, что вы ищете.

Вам может понадобиться использовать это в дополнение к Session.Abandon()

person RYFN    schedule 12.05.2009

Если сеансы сохраняются, вы можете попробовать (в web.config):

<sessionState regenerateExpiredSessionId="true">
person Axl    schedule 12.05.2009
comment
Кто-нибудь может объяснить, что это будет делать? MSDN не ясен msdn.microsoft.com/ ru/библиотека/ - person Slim; 13.05.2009

Это зависит от того, есть ли у вас ваше приложение на 2 серверах: 1 WebApplication, у которого есть своя сессия, и второе приложение WS или WCF, у которого тоже есть своя сессия, как это было в приложении, над которым я когда-то работал. Тогда, если у вас есть этот случай, сессия должна быть завершена во второй точке, а первая завершена, появляется тайм-аут. По крайней мере, вам придется использовать токен и вести список токенов активных сеансов. Может это ваш случай. удачи. PS. Чтобы убить сеанс, управляйте им на втором сервере.

person diadiora    schedule 12.05.2009