这个问题似乎与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/