Очистка сеанса в Global Application_Error - PullRequest
2 голосов
/ 11 мая 2010

Всякий раз, когда на нашем сайте возникает необработанное исключение, я хочу:

  • Отправить уведомление по электронной почте
  • Очистить сеанс пользователя
  • Отправить пользователя на страницу с ошибкой («Извините, возникла проблема ...»)

Первое и последнее, что я работал долгое время, но второе вызывает у меня некоторые проблемы. Мой Global.asax.vb включает в себя:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    ' Send exception report
    Dim ex As System.Exception = Nothing
    If HttpContext.Current IsNot Nothing AndAlso HttpContext.Current.Server IsNot Nothing Then
        ex = HttpContext.Current.Server.GetLastError
    End If
    Dim eh As New ErrorHandling(ex)
    eh.SendError()

    ' Clear session
    If HttpContext.Current IsNot Nothing AndAlso HttpContext.Current.Session IsNot Nothing Then
        HttpContext.Current.Session.Clear()
    End If

    ' User will now be sent to the 500 error page (by the CustomError setting in web.config)
End Sub

Когда я запускаю отладку, я вижу, что сеанс очищается, но затем на следующей странице сеанс снова возвращается!

В конце концов я нашел ссылку, которая предполагает, что изменения в сеансе не будут сохранены, пока не будет вызван Server.ClearError. К сожалению, если я добавлю это (чуть ниже строки, которая устанавливает «ex»), то перенаправление CustomErrors, похоже, не сработает, и у меня останется пустая страница?

Есть ли способ обойти это?

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Брунис - В ответ на ваш вопрос (у меня была такая же проблема), ваше приложение могло аварийно завершиться до application_error в точке до того, как вы получите доступ к информации о сеансе, такой как этап Begin_Request.

0 голосов
/ 11 мая 2010

Можете ли вы очистить сеанс на своей странице ошибки?

Кроме того, вы можете захотеть использовать ELMAH. Это делает все то, что вы пытаетесь сделать, просто и здорово.

...