Asp.net 会话过期,用户不再有效

Asp.net 会话过期,用户不再有效,asp.net,session,asp.net-membership,membership-provider,session-timeout,Asp.net,Session,Asp.net Membership,Membership Provider,Session Timeout,我在会话中缓存有关当前登录用户的信息。每当使用我的全局应用程序类上的CurrentUser属性时,都会加载此信息。它通过在MembershipProvider的自定义实现上调用GetUser()来实现这一点,该实现要么从会话加载用户,要么从DB加载用户并在会话中抛出用户对象 我应该如何处理这种情况 用户登录 管理员删除用户(或停用…点为 他们无法再登录) 用户的会话过期 用户导航到某个页面或发出请求,或其他任何内容 当前,如果出现这种情况,则会到处抛出NullReferenceException

我在会话中缓存有关当前登录用户的信息。每当使用我的全局应用程序类上的
CurrentUser
属性时,都会加载此信息。它通过在MembershipProvider的自定义实现上调用GetUser()来实现这一点,该实现要么从会话加载用户,要么从DB加载用户并在会话中抛出用户对象

我应该如何处理这种情况

  • 用户登录
  • 管理员删除用户(或停用…点为 他们无法再登录)
  • 用户的会话过期
  • 用户导航到某个页面或发出请求,或其他任何内容

  • 当前,如果出现这种情况,则会到处抛出NullReferenceException,因为ASP.NET框架调用GetUser(),因为它在数据库中找不到用户,所以什么也不返回(会话中没有任何内容,因为它已过期)。

    如果要返回null,则从GetUser()抛出异常。然后,您可以让应用程序错误事件捕获该特定异常并重定向到您的登录页面。

    如果您的应用程序认为某个用户已登录,但找不到该用户,一个选项可能是使用
    FormsAuthentication.SignOut()
    使ASP.NET忘记该用户。然后,他们应该返回到登录屏幕或匿名模式