Как программно завершить сеанс в asp.net, когда Session.Abandon () не работает? - PullRequest
14 голосов
/ 12 мая 2009

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

Ответы [ 6 ]

34 голосов
/ 12 мая 2009

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

Цитируется из MSDN :

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

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

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

11 голосов
/ 12 мая 2009

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

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

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

1 голос
/ 12 мая 2009

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

<sessionState regenerateExpiredSessionId="true">
1 голос
/ 12 мая 2009

Вот статья, в которой говорится о том, когда вызывается конец сеанса:

http://www.highoncoding.com/Articles/108_When_is_Session_End_Called__.aspx

1 голос
/ 12 мая 2009

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

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

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

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

0 голосов
/ 12 мая 2009

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

...