会话过期和用户不再有效

时间:2010-08-03 21:41:12

标签: asp.net session asp.net-membership membership-provider session-timeout

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

我该如何处理这种情况?

  1. 用户登录。
  2. 管理员删除用户(或停用...点是 他们不能再登录了。
  3. 用户会话过期。
  4. 用户导航到某个页面或发出请求,或其他任何内容。
  5. 目前,如果发生这种情况,NullReferenceExceptions会被抛出,因为ASP .NET框架调用GetUser(),它不会返回任何内容,因为它无法在数据库中找到用户(并且会话中没有任何内容,因为它过期)。

2 个答案:

答案 0 :(得分:1)

如果您的应用认为用户已登录但无法找到用户,则可能有一个选项是使用FormsAuthentication.SignOut()让ASP.NET忘记用户。然后他们应该被踢回登录屏幕或匿名模式。

答案 1 :(得分:0)

如果要返回null,则从GetUser()抛出异常。然后,您可以让Application_Error事件陷阱该特定异常并重定向到您的登录页面。