Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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()

Ответ 5

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

<sessionState regenerateExpiredSessionId="true">

Ответ 6

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