【问题标题】:Clearing Session in Global Application_Error清除全局应用程序中的会话_错误
【发布时间】:2011-02-17 21:43:31
【问题描述】:

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

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

第一个也是最后一个我已经工作了很长时间,但第二个给我带来了一些问题。我的 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 重定向似乎没有启动,我只剩下一个空白页?

有没有办法解决这个问题?

【问题讨论】:

  • 作为一个子问题,有没有办法让 vb.net 代码在 Stack Overflow 上看起来不错,还是我不走运?
  • 你试过用 Session.Abandon() 代替 Session.Clear() 吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    另外,您可能想考虑使用 ELMAH。它使您尝试做的所有事情变得简单而出色。

    【讨论】:

    • 谢谢。我仍然对这种方法有一个小问题,因为让错误页面进行清理感觉不对,但它确实有效。它还轻松解决了另一个我直到现在才考虑的问题,其中 404 错误算作应用程序错误,但我当然不希望那些清除会话!
    • 是的,有点古怪。我的错误页面甚至将我的错误记录到数据库中,这看起来很愚蠢,但它确实有效,而且我还有更重要的事情要做,而不是一直在学术上完美。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多