这个问题似乎与this帖子有关,但是我无法从线程中推断出解决方案。

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

    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如何引发空引用异常?这是异常(exception)情况,还是我的程序固有错误?接下来,在抛出此异常之前,我应该针对什么进行阻止?



谢谢

最佳答案

重要的是要认识到Session_End不一定要在HTTP请求的上下文中执行。 session 超时时,它可能会运行。您当时无法将任何内容发送给客户端,因为它根本不存在了!

因此,您不应尝试删除Session_End中的表单例份验证cookie。如果需要,请在应用程序中的某个位置单击“注销”按钮时,应尽快执行此操作。如果您需要用户的表单例份验证票证在发生超时后过期,则只需在配置文件中适本地设置cookie过期时间(可能等同于 session 超时值)即可。

关于c# - FormsAuthentication.SignOut抛出NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6604176/

10-11 08:58