微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – FormsAuthentication.SignOut抛出NullReferenceException

这个问题似乎与 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如何抛出空引用异常?这是一个例外的情况,还是在我的程序中做某些固有的错误?接下来,在抛出此异常之前,应该如何进行测试?

15:51:57,288 [13] ERROR ASP.global_asax – System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.Security.FormsAuthentication.SignOut()
at MvcApplication.Session_End

谢谢

解决方法

重要的是要意识到Session_End不一定在HTTP请求的上下文中执行.当会话超时时,它可能会运行.那时候你不能向客户发送任何东西,因为它根本就不在了!

因此,您不应该尝试在Session_End中删除表单身份验证cookie.如果你想要的话,你应该在应用程序中某处点击“注销”按钮的时候尽快做到这一点.如果您需要用户的表单身份验证凭证在超时发生后到期,您应该在配置文件中设置适当的cookie过期时间(可能等效于会话超时值).

原文地址:https://www.jb51.cc/csharp/93316.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐