FormsAuthentication.签到抛出NullReferenceException

本文关键字:NullReferenceException FormsAuthentication | 更新日期: 2023-09-27 18:01:36

这个问题似乎与这篇文章有关,但我无法从线程中推断出解决方案。

我在一个我继承的应用程序中注意到这段代码(在日志文件中注意到一个异常正在被吃掉之后):

    protected void Session_End(object sender, EventArgs e)
    {
        try
        {
            FormsAuthentication.SignOut();
            FormsAuthentication.RedirectToLoginPage();
            //if (this.Context.Handler is IRequiresSessionState || this.Context.Handler is IReadOnlySessionState)
            //{
            //    FormsAuthentication.SignOut();
            //    FormsAuthentication.RedirectToLoginPage();
            //}
        }
        catch (Exception ex)
        {
            this.GetType().GetLogger().Error(ex);
        }
    }

我想知道一些事情。首先,SignOut是如何抛出空引用异常的?这是一个例外情况,还是我在程序中做了一些固有的错误?接下来,在抛出这个异常之前,我应该测试什么来阻止它?

15:51:57,288 [13] ERROR ASP。global_asax -系统。NullReferenceException:对象引用没有设置为对象的实例。在System.Web.Security.FormsAuthentication.SignOut ()在MvcApplication。Session_End

谢谢

FormsAuthentication.签到抛出NullReferenceException

认识到Session_End不一定在HTTP请求的上下文中执行是很重要的。它可能在会话超时时运行。你不能在那个时候给客户发送任何东西,因为它已经不存在了!

因此,不应该尝试删除Session_End中的表单身份验证cookie。如果你愿意,你应该在应用程序的某个地方点击"Sign Off"按钮时尽快完成。如果您需要用户的表单身份验证票据在超时发生后过期,您应该简单地在配置文件中适当地设置cookie过期时间(可能相当于会话超时值)。