.net 正在清除全局应用程序中的会话\u错误

.net 正在清除全局应用程序中的会话\u错误,.net,asp.net,error-handling,global-asax,.net,Asp.net,Error Handling,Global Asax,每当我们的网站出现未经处理的异常时,我想: 发送通知电子邮件 清除用户的会话 将用户发送到错误页面(“抱歉,出现问题…”) 第一次也是最后一次我工作了很长时间,但第二次给我带来了一些问题。My Global.asax.vb包括: Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) ' Send exception report Dim ex As System.Exception = Noth

每当我们的网站出现未经处理的异常时,我想:

  • 发送通知电子邮件
  • 清除用户的会话
  • 将用户发送到错误页面(“抱歉,出现问题…”)
第一次也是最后一次我工作了很长时间,但第二次给我带来了一些问题。My 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重定向似乎没有启动,我留下了一个空白页


有办法解决这个问题吗?

您能在自定义错误页面上清除会话吗


此外,您可能还需要考虑使用ELMAH。它使您尝试做的所有事情都变得简单而精彩。

Brunis-在回答您的问题(我也遇到过同样的问题)时,您的应用程序可能在您访问会话信息(如开始请求阶段)之前的某个点因应用程序错误而崩溃

作为一个子问题,有没有办法让vb.net代码在堆栈溢出时看起来很好,还是我运气不好?您是否尝试过使用Session.放弃()而不是Session.Clear()?谢谢。我仍然对这种方法有一个小问题,让错误页面进行清理感觉不好,但它确实有效。它还很容易解决了另一个我到目前为止还没有考虑过的问题,即404错误算作应用程序错误,但我当然不希望这些错误清除会话!是的,有点怪。我的错误页面甚至将我的错误记录到数据库中,这似乎很愚蠢,但它是有效的,而且我还有比始终保持学业完美更重要的事情要做。:)