2010-12-09 3 views
1

Я нахожусь в середине попытки исправить мой тайм-аут сеанса и столкнулся с интересной проблемой. Я принял рекомендации here и here, чтобы предположить, что я набрал таймаут, когда Session.IsNewSession истинно, и файл cookie уже существует. Согласно нескольким сообщениям, это признаки того, что тайм-аут произошел. Все эти проверки у меня есть на моей домашней странице до входа пользователя в систему (они перенаправляются на эту страницу в ситуациях таймаута и выхода из системы).ASP.NET: Does Response.Redirect() завершает текущий сеанс?

Итак, давайте предположим, что все правильно. Когда пользователь нажимает кнопку Выход в правом применения, я бегу мой необходимый код базы данных для завершения сеанса, то я бегу это:

//abandon session 
Global.Session.Abandon(); 

//redirect 
Response.Redirect(FormsAuthentication.LoginUrl, false); 

То, что я сразу заметил в моей домашней странице, когда я выступаю проверки тайм-аута сеанса, было то, что Session.IsNewSession было правдой, в конечном итоге привело к логике, которая думает, что есть таймаут сеанса. Очевидно, это не так; пользователь просто нажал «Выход». Поставив точку останова в Session_End в моем глобальном файле, я смог увидеть, что Session_End запускается после выполнения оператора Response.Redirect(), когда пользователь выходит из системы.

Так что мне интересно, должно ли это случиться? Первоначально я думал, что это имеет какое-то отношение к Session.Abandon(), но это, похоже, не вызывает Session_End. Есть идеи?

Спасибо.

ответ

2

Событие Session_End запускается только после завершения текущего запроса. Переадресация - это конец вашего запроса, поэтому событие срабатывает в это время. Переадресация сама по себе не завершает текущий сеанс.

+0

И я предполагаю, что сессия закончилась во время этого запроса, потому что я говорю Session.Abandon()? – 2010-12-09 19:03:40

Смежные вопросы