清除全局Application_Error中的会话

时间:2010-05-10 22:05:44

标签: .net asp.net error-handling global-asax

每当我们网站上发生未处理的异常时,我想:

  • 发送通知电子邮件
  • 清除用户的会话
  • 将用户发送到错误页面(“抱歉,发生问题......”)

第一次也是最后一次我已经工作了很长时间,但第二次却给我带来了一些问题。我的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,否则不会保存对session的更改。不幸的是,如果我添加它(在设置“ex”的行的正下方),那么CustomErrors重定向似乎没有启动,我留下了空白页?

有解决方法吗?

2 个答案:

答案 0 :(得分:1)

Brunis - 在回答您的问题时(我遇到了同样的问题)您的应用程序可能在之前的点崩溃了application_error,您可以访问会话信息,例如Begin_Request阶段。

答案 1 :(得分:0)

您可以在自定义错误页面上清除会话吗?

此外,您可能希望了解如何使用ELMAH。它使您尝试做的所有事情变得简单而且令人敬畏。